multimap容器和multiset容器中的find操作
前言
multimap容器是map容器的“ 增强版 ”,它允许一个键对应多个值。对于map容器来说,find函数将会返回第一个键值匹配元素所在处的迭代器。那么对于multimap容器来说,find函数将如何运作呢?如果要实现和map容器的find函数同样的功能,则它将返回多个迭代器,这样太复杂了。本文将讲解C++中multimap容器的“ find实现 ”。
解决思路一
摒弃find函数,使用另外两个新函数,它们是专家们为了解决multimap中的“ find操作 ”问题专门设计的:
1. lower_bound():返回一个迭代器,指向键不小于k的第一个元素。
2. upper_bound():返回一个迭代器,指向键大于k的第一个元素。
解决思路一代码示例
下面这段代码首先创建一个multimap容器并赋以相关值,然后检索其中某个键,最后输出其对应的所有值:
#include <iostream>
#include <map>
#include <string> using namespace std; int main()
{
multimap<string, string> book; /*
* multimap容器是不支持下标操作的,因为没有实际意义。
* 故我们采取调用insert函数的方法给容器赋值。
*/
book.insert(make_pair("金庸", "倚天屠龙记"));
book.insert(make_pair("金庸", "射雕英雄传"));
book.insert(make_pair("金庸", "笑傲江湖"));
book.insert(make_pair("古龙", "楚留香传奇"));
book.insert(make_pair("古龙", "陆小凤传奇"));
book.insert(make_pair("黄易", "边荒传说")); /*
* 使用lower_bound()和upper_bound()获取指向键值匹配元素下界和上界的迭代器
*/
multimap<string, string>::iterator bookit1, bookit2;
bookit1 = book.lower_bound("古龙");
bookit2 = book.upper_bound("古龙"); /*
* 打印检索结果
*/
cout << "作者: " << bookit1->first << endl << "书名:" << endl;
while (bookit1 != bookit2) {
cout << bookit1->second << " ";
bookit1++;
}
cout << endl; return ;
}
运行结果:
解决思路二
依然摒弃find函数,使用equal函数。它也是专家们为了解决multimap中的“ find操作 ”问题专门设计的。它返回的是一个pair对象,其first成员返回指向匹配元素上界的迭代器,second成员则返回指向匹配元素下界的迭代器。
解决思路二代码示例
和解决思路一代码示例一样,下面这段代码首先创建一个multimap容器并赋以相关值,然后检索其中某个键,最后输出其对应的所有值:
#include <iostream>
#include <map>
#include <utility>
#include <string> using namespace std; int main()
{
multimap<string, string> book; /*
* multimap容器是不支持下标操作的,因为没有实际意义。
* 故我们采取调用insert函数的方法给容器赋值。
*/
book.insert(make_pair("金庸", "倚天屠龙记"));
book.insert(make_pair("金庸", "射雕英雄传"));
book.insert(make_pair("金庸", "笑傲江湖"));
book.insert(make_pair("古龙", "楚留香传奇"));
book.insert(make_pair("古龙", "陆小凤传奇"));
book.insert(make_pair("黄易", "边荒传说")); /*
* 使用equal_range函数获取指向键值匹配元素下界和上界的迭代器
*/
typedef multimap<string, string>::iterator bookit;
pair<bookit, bookit> p = book.equal_range("古龙"); /*
* 打印检索结果
*/
cout << "作者: " << p.first->first << endl << "书名:" << endl;
while (p.first != p.second) {
cout << p.first->second << " ";
p.first++;
}
cout << endl; return ;
}
运行结果:
说明
multiset容器的find实现问题同样可以使用本文所提供的两种方法
multimap容器和multiset容器中的find操作的更多相关文章
- 第十三篇:multimap容器和multiset容器中的find操作
前言 multimap容器是map容器的“ 增强版 ”,它允许一个键对应多个值.对于map容器来说,find函数将会返回第一个键值匹配元素所在处的迭代器.那么对于multimap容器来说,find函数 ...
- stl中顺序性容器,关联容器两者粗略解释
什么是容器 首先,我们必须理解一下什么是容器,在C++ 中容器被定义为:在数据存储上,有一种对象类型,它可以持有其它对象或指向其它对像的指针,这种对象类型就叫做容器.很简单,容器就是保存其它对象的对象 ...
- STL学习系列八:Set和multiset容器
1.set/multiset的简介 set是一个集合容器,其中所包含的元素是唯一的,集合中的元素按一定的顺序排列.元素插入过程是按排序规则插入,所以不能指定插入位置. set采用红黑树变体的数据结构实 ...
- STL之Set和multiset容器
1.Set和multiset容器 1)set是一个集合容器,其中所包含的元素是唯一的,集合中的元素按一定的顺序排列.元素插入过程是按排序规则插入,所以不能指定插入位置. 2)set采用红黑树变体的数据 ...
- C++ STL 学习笔记__(7)Set和multiset容器
10.2.8 Set和multiset容器 set/multiset的简介 ² set是一个集合容器,其中所包含的元素是唯一的,集合中的元素按一定的顺序排列.元素插入过程是按排序规则插入,所以不能指 ...
- STL Set和multiset 容器
STL Set和multiset 容器 set/multiset的简介 set是一个集合容器,其中所包含的元素是唯一的,集合中的元素按一定的顺序排列. 元素插入过程是按排序规则插入,所以不能指定插入位 ...
- set和multiset容器
set和multiset容器的能力 set 和multiset容器的内部结构通常由平衡二叉树(balanced binary tree)来实现.当元素放入容器中时,会按照一定的排序法则自动排序,默认是 ...
- stl之multiset容器的应用
与set集合容器一样,multiset多重集合容器也使用红黑树组织元素数据,仅仅是multiset容器同意将反复的元素健值插入.而set容器则不同意. set容器所使用的C++标准头文件set.事实上 ...
- 详解C++ STL multiset 容器
详解C++ STL multiset 容器 本篇随笔简单介绍一下\(C++STL\)中\(multiset\)容器的使用方法及常见使用技巧. multiset容器的概念和性质 \(set\)在英文中的 ...
随机推荐
- 【CCF】网络延时 树搜索
#include<iostream> #include<cstdio> #include<string> #include<cstring> #incl ...
- Java面试题之继承、组合、聚合有什么区别
继承:他是is-a的关系,指一个类继承另外一个类的功能 例如:public class A extends B { } 聚合:他是has-a 例如:public class A{ List<B& ...
- 小程序 之使用HMACSHA1算法加密报文
首先说说我们前端常用的加密技术, 我们常用的加密技术有:如MD5加密,base64加密 今天要说的是HMACSHA1加密技术 先介绍下什么是SHA1算法, 安全哈希算法(Secure Hash Alg ...
- 洛谷——P2919 [USACO08NOV]守护农场Guarding the Farm
P2919 [USACO08NOV]守护农场Guarding the Farm 题目描述 The farm has many hills upon which Farmer John would li ...
- Codeforces 622F The Sum of the k-th Powers
Discription There are well-known formulas: , , . Also mathematicians found similar formulas for high ...
- Java中判断String对象是否为空的方法
Java原生的方法: String对象中有一个isEmpty的方法判断是否为空,其实isEmpty完全等同于string.length()==0,注意如果String本身是null,那么使用strin ...
- Maven创建Java Application工程(既jar包)
Maven在创建工程时使用的是archetype(原型)插件,而如果要创建具体的工程,比如Application这些,那么可以使用maven-archetype-quickstart(相当于一个子类型 ...
- SQL Server 存储
http://baoqiangwang.blog.51cto.com/1554549/541298/
- CodeSign error: code signing is required for product type 'Application' in SDK 'iOS 7.0'
这个一般是证书设置的问题, 在build settings中找到 Code Signing->Code Signing Identity修改成有效的证书即可
- jmeter如何在写入jtl文件时同步写入数据库
参考:1.http://blog.csdn.net/cakushin7433/article/details/53367508 2.http://blog.csdn.net/cakushin74 ...