关联容器总结

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_typevalue_type一样

对于map容器,表示关键字的类型

mapped_type:只适用于map,每个关键字关联的值的类型

value_type:对于set,与key_type相同

对于map,表示pair<const key_type, mapped_type>键值对

pair键值对有两个公有成员firstsecond,分别表示关键字和值

4.添加元素

c.insert(v)

c.emplace(args)

对于mapset:只有当元素不再容器中才插入v,返回一个pairfirst成员表示一个迭代器,指向该关键字,second成员是  表示是否插入成功的  bool

对于multimapmultiset:无论什么时候都会插入v,并返回一个指向新元素的迭代器

c.insert(b,e)   

c.insert(li)

分别表示插入b,e迭代器之间的元素,插入li列表中的元素,返回void

对于mapset:只会插入不再容器中的元素

对于multimapmultiset:插入每个元素

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的元素数量,对于setmap,元素数永远为10

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不存在,则这两个迭代器相等。

posted @ 2015-08-16 18:23  runninglzw  阅读(223)  评论(0编辑  收藏  举报