Chapter11(关联容器)--C++Prime笔记
1.关联容器:
map关键字-值对,经常被称为关联数组
set中每个元素只有一个关键字,即只保存关键字的容器
①允许重复的关键字的容器名字都包含multi。
②不保持关键字顺序存储的容器的名字都以但粗unordered开头。
③无序容器以哈希函数来组织元素。
④关联容器的迭代器都是双向的。
map set multimap multiset / 无序集合 unordered_map unordered_set unordered_multimap unordered_multiset.
2.使用map:map <string,size_t>word_count;
①指定关键字和值的类型
②map所使用的pair用first成员保存关键字,用second成员保存对应的值。
使用set:set<string> exclude = {"the","but"};
exclude.find(word)返回一个迭代器,如果关键字在set中,迭代器指向该关键字,否则返回尾后迭代器。
3.map中的元素的pair类型的,这种类型定义在头文件utility中。
pairde的数据成员是public的。
4.关联容器额外的类型别名:
key_type:此容器类型的关键字类型
mapped_type:每个关键字关联的类型;只适用于map
value_type:对于set与key_type相同
对于map,为pair<const key_type,mapped_type>
map和set关键字是const的
5.当使用一个迭代器历遍一个map,multimap,set,multiset时,迭代器按关键字升序历遍元素。
6.向map和和向multimap,multiset添加元素的区别:
①前者只能添加不存在的元素。
②前者返回pair<std:map::value_type,bool>,后者返回指向新元素的迭代器。
7.set和multimap,unordered multimap不支持小标运算符。
对于map来说,如果使用一个不在容器中的关键字作为下标,会添加一个具有此关键字的元素到map中。但是如果使用at函数,若关键字不存在,抛出一个out_of_range异常。
①对map进行下标操作时,会获得一个mapped_type对象,但当解引用一个map迭代器时,会得到一个value_type对象。
②下标和at操作只适用于非const的map和unordered_map
8.
c.lower_bound(k)返回一个迭代器,指向第一个关键字不小于k的元素(指向第一个具有给定关键字的元素)
c.upper_bound(k)返回一个迭代器,指向第一个关键字大于k的元素(指向最后一个匹配给定关键字的元素之后的位置)--如果lower_bound(k)和upper_bound(k)返回相同迭代器,则说明不存在这个关键字。
c.equal_range(k)返回一个迭代器pair,表示关键字等于k的元素的范围,若k不存在,pair的两个成员均等于c.end();
9.getline不会跳过前导空格。