文章目录提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
- C++ set,map,multimap,multiset,unordered 总结
- 1、pair
- 2、map
- 3、set
- 4、multimap
- 5、multiset
- 6、unordered_map,unordered_set,unordered_multiset,unordered_multimap
C++ set,map,multimap,multiset,unordered 总结 1、pair
pair对象是一个键值对
头文件:不需要头文件
定义 :
pairp; pair p1; pair > line; pair author("James", "Joyce"); p2=make_pair("James", "Joyce");
用法:
pair2、mapp("James", "Joyce"); string one=p.first; string two=p.second;
map代表一个映射,是键值对的集合,每个键和值的类型分别相同,键不能重复,值可重复
头文件:
#include
定义 :
mapm1; map m2(m1);//拷贝m1 map ::key_type;//键对应的类型,string map ::mapped_type;//值对应的类型,int map ::value_type;//pair
用法:
1、访问元素 m1["anna"]=1; m1["bob"];//值初始化为0 如果有"anna"的键,将其值设为1,如果没有,添加一个<"anna",1>键值对 2、插入元素 pair3、setp("anna",1); m.insert(p);//插入操作插入的是pair类型 m.insert(make_pair("anna",1));//常用写法 3、查找元素 int num=m.count("anna");//计数,查找"anna"出现的次数,对于map,如果存在则为1,不存在为0 int occurs = 0; map ::iterator it = m.find("foobar");//find返回迭代器 if (it != m.end()) occurs = it->second; 4、删除元素 m.erase("anna"); map ::iterator iter = m.find("anna");//用迭代器删除 m.erase(iter); 5、迭代器 map ::iterator iter = m.begin(); while (iter != m.end()) { cout << iter->first << endl << iter->second << endl; ++iter; // increment iterator to denote the next element } 6、求大小 int m_size=m.size();
set代表一个集合,每个元素类型相同,不可重复
头文件:
#include
定义 :
sets; set s1(s);//拷贝s vector vec = {1,2,3,4}; set iset(vec.begin(), vec.end());//利用vector容器初始化
用法:
1、插入元素
s.insert("anna");
iset.insert(vec.begin(), vec.end());//用vector批量插入
2、查找元素
int num = s.count("anna");//计数,查找"anna"出现的次数,对于set,如果存在则为1,不存在为0
set::iterator it = s.find("anna");
if (it != s.end())
cout<<*it<::iterator it = s.find("anna");
s.erase(it);//使用迭代器删除
4、迭代器
set::iterator iter = s.begin();
while (iter != s.end()) {
cout << *iter<< endl;
++iter; // increment iterator to denote the next element
}
5、求大小
int s_size=s.size();
4、multimap
multimap代表一个映射,是键值对的集合,每个键和值的类型分别相同,键、值可重复,键相同的元素位置相邻
头文件:
#include
定义 :
multimapmm; multimap mm1(mm);
用法:
1、插入元素
mm.insert(make_pair(string("Barth, John"),string("Lost in the Funhouse")));
2、查找元素
int num=mm.count("anna");//元素个数可能大于1
multimap::iterator it =mm.find("anna");
for(int i=0;isecond<::iterator it=mm.find("anna");
mm.erase(it);//删除迭代器指向的第一个键值对
4、迭代器
mm.lower_bound(key);//返回一个迭代器,指向键不小于 k 的第一个元素
mm.upper_bound(key);//返回一个迭代器,指向键大于 k 的第一个元素
mm.equal_range(key);//返回一个迭代器的 pair 对象,它的 first 成员等价于 m.lower_bound(k),second 成员则等价于 m.upper_bound(k)
(1)查找相同元素的迭代器1
multimap::iterator iter_low=mm.lower_bound("anna");
multimap::iterator iter_up=mm.upper_bound("anna");
while(iter_low!=iter_up)
{
cout<second<::iterator it;//使用typedef简化程序
pairpos = mm.equal_range("anna");
while (pos.first != pos.second) {
cout << pos.first->second << endl; // print each title
++pos.first;
}
(3)整个multimap的迭代器
multimap::iterator iter = mm.begin();
while (iter != mm.end()) {
cout << iter->first << endl
<< iter->second << endl;
++iter; // increment iterator to denote the next element
}
5、求大小
int m_size=mm.size();
5、multiset
multiset代表一个集合,每个元素类型相同,可重复,相同的元素位置相邻
头文件:
#include
定义 :
multisets; multiset s1(s);//拷贝s vector vec = {1,2,3,4}; multiset iset(vec.begin(), vec.end());//利用vector容器初始化,vector中重复元素也会进入iset
用法:
1、插入元素
s.insert("anna");
iset.insert(vec.begin(), vec.end());//用vector批量插入
2、查找元素
int num = s.count("anna");//计数,查找"anna"出现的次数,可以大于1
multiset::iterator it =s.find("anna");
for(int i=0;i::iterator it = s.find("anna");
s.erase(it);//使用迭代器删除
4、迭代器
s.lower_bound(key);//返回一个迭代器,指向不小于 k 的第一个元素
s.upper_bound(key);//返回一个迭代器,指向大于 k 的第一个元素
s.equal_range(key);//返回一个迭代器的 pair 对象,它的 first 成员等价于 s.lower_bound(k),second 成员则等价于 s.upper_bound(k)
(1)查找相同元素的迭代器1
multiset::iterator iter_low=s.lower_bound("anna");
multiset::iterator iter_up=s.upper_bound("anna");
while(iter_low!=iter_up)
{
cout<<*iter_low<::iterator it;//使用typedef简化程序
pairpos = s.equal_range("anna");
while (pos.first != pos.second) {
cout << *pos << endl; // print each title
++pos.first;
}
(3)整个multiset迭代器
multiset::iterator iter = s.begin();
while (iter != s.end()) {
cout << *iter<< endl;
++iter; // increment iterator to denote the next element
}
5、求大小
int s_size=s.size();
6、unordered_map,unordered_set,unordered_multiset,unordered_multimap
C++11标准定义的4个无序容器,使用哈希函数来组织元素,
头文件:
#include,#include
定义 :
定义与对应的类型相同
用法:
用法相同,在multimap,multiset中,相同键和相同元素依然近邻存放。



