C++ 关联容器
关联容器类型
map 关联数组,保存关键字-值对
set 关键字即值
multtmap 关键字可重复map
multiset 关键字可重复set
无序容器
unordered_map 哈希函数组织的map
unordered_set 哈希函数组织的set
unordered_multmap 可重复出现哈希map
unordered_multiset 可重复出现哈希set
map
定义时指定关键字和值的类型,关键字在第一位,值第二位,关键字可以作为下标操作。
当从map提取一个元素时,会获得一个pair类型的对象,pair的first成员保存的是关键字,second对象保存的是值。
插入操作
向map中添加元素进行insert操作,操作时元素类型时pair,创建pair时最简单的方法时参数列表使用花括号初始化。
创建pair的函数:
make_pair(v1,v2); //pair类型从v1,v2的推断
插入时insert会返回一个pair,pair的first成员是插入元素的迭代器,second成员是bool值,关键字存在时为false,关键字不存在(插入成功)时返回true。
删除操作
删除元素时,返回值为删除的数量,如果对multimap进行删除,则返回值可能大于1。
删除时也可以用一个或一对迭代器来删除。
erase(k) //删除关键字为k的元素,返回删除元素的数量
erase(p) //删除迭代器p指定的元素,返回p的下一个元素
erase(b,e) //删除迭代器对b和e所表示的范围中的元素,返回e
下标操作
对map进行下标操作时,直接使用方括号[]时,如果不存在该关键字,则会创建该关键字并初始化。
所以应使用at对map进行访问:
c.at(k) //访问关键字为k的元素
访问元素
find(k) //查找第一个关键字为k的元素,若不存在返回尾后迭代器
count(k) //计算关键字k的数量
lower_bound(k) //返回第一个不小于k的元素
upper_bound(k) //返回第一个大于k的元素
equal_range(k) //返回迭代器pair,first指向第一个与元素匹配的位置,second保存最后一个与元素匹配的位置,若未找到匹配元素,则两个迭代器都指向关键字可以插入的位置
set
set只有关键字,没有值。
set的迭代器为const类型,即关键字不能改变。
无序容器
无序容器在存储上组织一组桶,使用哈希函数将元素映射到桶。
不能直接使用自定义类型的无序容器。