1、关联容器通过键存储和读取元素,而顺序容器则通过元素在容器中的位置顺序存储和访问元素。

2、map的元素以键-值对的形式组织:键用作元素在map中的索引,而值则表示所存储和读取的数据。set仅包含一个键,并有效地支持关于某个键是否存在的查询。

3、map 关联数组;元素通过键来存储和读取

set 大小可变的集合,支持通过键实现的快速读取

multimap 支持同一个键多次出现的map类型

multiset 支持同一个键多次出现的set类型

4、pair类型提供的操作

pair<T1, T2> p1; 创建一个空的pair对象,它的两个元素分别是T1和T2类型,采用值初始化

pair<T1, T2> p1(v1, v2); 创建一个pair对象,它的两个元素分别是T1和T2类型,其中first成员初始化为v1,而second成员初始化为v2

make_pair(v1, v2) 以v1和v2值创建一个新的pair对象,其元素类型分别是v1和v2的类型

p1 < p2 两个pair对象之间的小于运算,其定义遵循字典次序:如果p1.first < p2.first 或者!(p2.first < p1.first) && p1.second < p2.second,则返回true

p1 == p2 如果两个pair对象的first和second成员依次相等,则这两个对象相等。该运算使用其元素的==操作符

p.first 返回p中名为first的(公有)数据成员

p.second 返回p中名为second的(公有)数据成员

5、在使用关联容器时,它的键不但有一个类型,而且还有一个相关的比较函数。默认情况下,标准库使用键类型定义的<操作符来实现键的比较。

6、map对象的元素是键-值对,也即每个元素包含两个部分:键以及由键关联的值。map的value_type就反映了这个事实,它是存储元素的键以及值的pair类型,而且键为const。例如,word_count数组的value_type为pair<const string, int>类型。

在学习map的接口时,需谨记value_type是pair类型,它的值成员可以修改,但键成员不能修改。

7、map类定义的类型

map<K, V>::key_type 在map容器中,用做索引的键的类型

map<K, V>::mapped_type 在map容器中,键所关联的值的类型

map<K, V>::value_type 一个pair类型,它的first元素具有const map<K, V>::key_type类型,而second元素则为map<K, V>::mapped_type类型

8、使用下标访问map与使用下标访问数组或vector的行为截然不同:用下标访问不存在的元素符号将导致在map容器中添加一个新的元素,它的键即为该下标值。

9、map容器提供的insert操作

m.insert(e) e是一个用在m上的value_type类型的值。如果键(e.first)不在m中,则插入一个值为e.second的新元素;如果该键在m中已存在,则保持m不变。该函数返回一个pair类对象,包含指向键为e.first的元素的map迭代器,以及一个bool类型的对象,表示是否插入了该元素

m.insert(beg, end) beg和end是标记元素范围的迭代器,其中的元素必须为m.value_type类型的键-值对。对于该范围内的所有元素,如果它的键在m中不存在,则将该键及其关联的值插入到m。返回void类型

m.insert(iter, e) e是一个用在m上的value_type类型的值。如果键(e.first)不在m中,则创建新元素,并以迭代器iter为七点搜索新元素存储的位置。返回一个迭代器,指向m中具有给定键的元素

10、不修改map对象的查询操作

m.count(k) 返回m中k的出现次数

m.find(k) 如果m容器中存在按k索引的元素,则返回指向该元素的迭代器。如果不存在,则返回超出末端迭代器

11、返回迭代器的关联容器操作

m.lower_bound(k) 返回一个迭代器,指向键不小于k的第一个元素

m.upper_bound(k) 返回一个迭代器,指向键大于k的第一个元素

m.equal_range(k) 返回一个迭代器的pair对象。它的first成员等价于m.lower_bound(k)。而second成员则等价于m.upper_bound(k)