标签:
1.容器类型
按关键字有序保存元素:
map:用来保存键值对,关键字不可以重复
set:只保存关键字,关键字不可重复
multimap:用来保存键值对,关键字可以重复
multiset:只保存关键字,关键字可以重复
无序集合:
unordered_map:用哈希函数组织的map
unordered_set:用哈希函数组织的set
unordered_multimap:用哈希函数组织的map,关键字可重复
unordered_multiset:用哈希函数组织的set,关键字可重复
2.定义和初始化容器
可以使用3种方式初始化(和上一篇的顺序容器初始化方式相同):
1.c={a,b,c...} 按括号中的列表进行初始化
map<string,string> word_count={{“a”,”1”}, {“b”,”2”}};
2.初始化为另一个同类型容器的拷贝
C c(c1) c初始化为c1的拷贝
3.按照迭代器范围来初始化容器
C c(b,e) 将b,e迭代器之间的元素拷贝到c
3.关联容器额外的类型别名
key_type:容器的关键字类型
对于set容器,key_type和value_type一样
对于map容器,表示关键字的类型
mapped_type:只适用于map,每个关键字关联的值的类型
value_type:对于set,与key_type相同
对于map,表示pair<const key_type, mapped_type>键值对
pair键值对有两个公有成员first和second,分别表示关键字和值
4.添加元素
c.insert(v)
c.emplace(args)
对于map,set:只有当元素不再容器中才插入v,返回一个pair,first成员表示一个迭代器,指向该关键字,second成员是 表示是否插入成功的 bool值
对于multimap和multiset:无论什么时候都会插入v,并返回一个指向新元素的迭代器
c.insert(b,e)
c.insert(li)
分别表示插入b,e迭代器之间的元素,插入li列表中的元素,返回void
对于map,set:只会插入不再容器中的元素
对于multimap和multiset:插入每个元素
c.insert(p,v)
c.empalce(p,args)
并不是插入到p之前(与顺序容器不同),而是指示从p迭代器开始搜索,插入到指定位置(因为有序容器中的元素是有序的)
5.删除容器
c.erase(k):删除关键字为k的元素,返回被删除元素的数量
c.erase(p):删除p迭代器指向的元素,返回指向被删元素之后元素的迭代器,p必须指向c中的真实元素
c.erase(b,e):删除迭代器b,e之间的元素,返回e
6.访问元素
c.find(k):返回指向第一个关键字为k的迭代器,若不存在k,返回尾后迭代器(c.end())
c.count(k):返回关键字等于k的元素数量,对于set和map,元素数永远为1和0
c.lower_bound(k):返回一个迭代器,指向第一个 关键字>=k 的元素
c.upper_bound(k):返回一个迭代器,指向第一个 关键字>k 的元素
c.equal_range(k):返回一个迭代器pair,表示关键字=k的元素范围,若k不存在,pair两个成员都为c.end()
注:使用c.lower_bound(k)和c.upper_bound(k)配合查找k,若k存在,分别返回第一个指向k的迭代器和最后一个指向k元素之后的迭代器(不是最后一个k元素),若k不存在,则这两个迭代器相等。
标签:
原文地址:http://www.cnblogs.com/runninglzw/p/4734726.html