在multimap和multiset中查找元素
来源:互联网 发布:js 获取get url参数 编辑:程序博客网 时间:2024/05/21 17:34
与map和set中查找元素不同的是,multimap和multiset查找元素要复杂的多;
由于multimap和multiset中,允许元素重复,所以使用find()函数查找的时候,并不只有一个元素,并
不能直接使用find();
方案一:
由于在multimap和multiset中,具有相同关键字的元素在容器中会相邻存储
可以使用find()+count()结合:
find()找到第一个查找到的元素
count()控制读取的数目
具体代码如下:
#include <iostream>#include<set>#include<string>#include<map>#include<unordered_map>using namespace std;int main(){ multimap<string,int> m={{"s",1},{"s",1},{"s",3},{"s",4},{"sb",5}}; string str="s"; int num=m.count(str); multimap<string,int>::iterator it=m.find(str); while(num>0) { cout<<it->first<<" "<<it->second<<endl; ++it; num--; } return 0;}
方案二:
使用两个迭代器:
lower_bound : 元素如果在容器中,指向第一个具有给定关键字的元素
upper_bound :元素如果在容器中,指向最后一个具有给定关键字的元素之后的位置
如果不在容器中,他们会指向一个不影响排序的关键字插入位置;
代码如下:
#include <iostream>#include<set>#include<string>#include<map>#include<unordered_map>using namespace std;int main(){ multimap<string,int> m={{"s",1},{"s",1},{"s",3},{"s",4},{"sb",5}}; string str="s"; multimap<string,int>::iterator s_begin=m.lower_bound(str);//指向第一个具有给定关键字的元素 multimap<string,int>::iterator s_end=m.upper_bound(str); //指向最后一个具有给定关键字元素之后的位置 while(s_begin != s_end) { cout<<s_begin->first<<" "<<s_begin->second<<endl; ++s_begin; } /* for( unordered_map< string,int >::const_iterator it=m.cbegin(); it != m.cend(); ++it) { cout<<it->first<<" "<<it->second<<endl; }*/ return 0;}
可以看出,lower_bound和upper_bound表示了一个具有该关键字元素的范围;在这个范围内,所有元素都是我们要查找的元素;
此时,只需要判断两个迭代器是否相等作为终止条件即可;即s_begin != s_end
方案三:
使用equal_range(),这种方法最简单;
此函数接收一个关键字,返回一个pair类型,里面存放着两个迭代器,但是它本身不是迭代器;
如果关键字存在,则pair的第一个迭代器指向第一个与关键字匹配的元素;
第二个迭代器指向最后一个指向与关键字匹配的元素之后的位置。
代码如下:
#include <iostream>#include<set>#include<string>#include<map>#include<unordered_map>using namespace std;int main(){ multimap<string,int> m={{"s",1},{"s",1},{"s",3},{"s",4},{"sb",5}}; string str="s"; auto pos=m.equal_range(str); while( pos.first != pos.second )//pos.first是第一个元素的迭代器,pos.second是最后一个元素之后位置的迭代器 { cout<<pos.first->first<<" "<<pos.first->second<<endl; ++pos.first; } return 0;}
阅读全文
0 0
- 在multimap和multiset中查找元素
- c++中,在multimap中查找元素(一键多值)
- multimap和multiset容器
- Set 和 Multiset , Map 和 Multimap
- multimap的查找和删除元素的使用举例
- STL容器之multimap和multiset
- c++ primer 【笔记】multimap 和 multiset类型
- guava multimap 和 multiset的使用
- STL关联容器之multiset和multimap
- guava之MultiSet、MultiMap和BiMap
- 关于set/multiset和map/multimap总结
- STL中hashtable,hashset,hashmap,set,map,multiset和multimap的区别
- STL中hashtable,hashset,hashmap,set,map,multiset和multimap的区别
- C++STL中,map/multimap,set/multiset 和vector的排序
- STL中HashTable HashMap HashSet Set Map MultiSet MultiMap总结
- map,multimap,set,multiset
- set,map,multiset,multimap
- STL源码:multimap、multiset
- 数据结构--串 KMP匹配
- IDS验证(正整数并且是逗号分隔)
- 【Java】线程安全学习
- 探探左滑右滑, OKHttp请求网络数据实现
- 在web.xml中,<context-param>标签的作用是什么?
- 在multimap和multiset中查找元素
- le for current thread
- c语言小程序之三子棋
- Hive初级使用
- 笔记
- Django学习7:模型(models)
- 5. 年龄与疾病
- Maven dependencymanagement vs dependencies
- java的经典算法40例-全源码