第10章 关联容器
1、map的构造函数
map<k,v> m; 创建一个名为m的空map对象,其健和值得类型分别为k和v。
map<k, v> m(m2) 创建m2的副本m,m与m2必须有相同的健类型和值类型。
map<k, v> m(b, e) 创建map类型的对象m,存储迭代器b和e标记的范围内所有元素的副本,元素的类型必须能转换为pair<const k, v>
2、 map<string, int> word_count;
//insert default initialzed element with key Anna;then assign 1 to this value.
Word_count[“Anna”] = 1;
将发生以下事情:
(1) 在word_count中查找健为Anna的元素,没有找到。
(2) 将一个新的健-值对插入到word_count中。它的健是const string 类型的对象,保存Anna。而它的值则采用值初始化,这就意味着在本例中值为0.
(3) 将这个新的健-值对插入到word_count中。
(4) 读取新插入的元素,并将它的值赋为1.
3、 使用下标访问map与使用下标访问数组或vector的行为截然不同;用下标访问不存在的元素将导致在map容器中添加一个新的元素,它的健即为该下标值。此时,所关联的值采用值初始化,类类型的元素用默认构造函数初始化,而内置类型的元素则初始化为0.
4、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。返回void类型。
m.insert(iter,e) e是一个用在m上的value_type类型的值。如果健(e.first)不在m中,则创建新元素,并以迭代器iter为起点搜索新元素存储的位置。返回一个迭代器,指向m中具有给定健的元素。
5、不修改map对象的查询操作:
m.count(k)返回m中k的出现次数
m.find(k) 如果m容器中存在按k索引的元素,则返回指向该元素的迭代器。如果不存在,则返回超出末端迭代器
6、从map对象中删除元素
m.erase(k) 删除m中健为k的元素。返回size_type类型的值,表示删除的元素个数。
m.erase(p) 从m中删除迭代器p所指向的元素。P必须指向m中确实存在的元素,而且不能等于m.end()。返回void类型。
m.erase(b,e) 从m中删除一段范围内的元素,该范围由迭代器对b和e标记,b和e必须标记m中的一段有效范围:即b和e都必须指向m中的元素或最后一个元素的下一个位置,而且,b和e必须标记m中的一段有效范围:即b和e都必须指向m中的元素或最后一个元素的下一个位置 。而且,b和e要么相等(此时删除的范围为空),要么b所指向的元素必须出现在e所指向的元素之前,返回void类型。
7、set不支持下标操作符,而且没有定义mapped_tpye类型。
8、为了通过健从set中获取元素,可使用find运算。如果只需简单地判断某个元素是否存在,同样可以使用count运算,返回set中该健对应的元素个数。
9、multimap和multiset类型与相应的单元素版本具有相同的头文件定义:分别是map和set头文件。
10、 multimap和multiset所支持的操作分别与map和set的操作相同,只有一个例外,multimap不支持下标运算。
11、 在multimap和multiset容器中,如果某个键对应多个实例,则这些实例在容器中将相邻存放。
12、与众不同的面向迭代器的解决方案:
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)
13、Lower_bound返回的迭代器不一定指向拥有特定健的元素。如果该健不在容器中,则lower_bound返回在保持容器元素顺序的前提下该健应被插入的第一个位置。
14、equal_range函数,来取代调用upper_bound和lower_bound函数。equal_range函数返回存储一对迭代器的pair对象,如果该值存在,则pair对象中的第一个迭代器指向该键关联的第一个实例,第二个迭代器指向该键关联的最后一个实例的下一个位置。如果找不到匹配的元素,则pair对象中的两个迭代器都将指向此键应该插入的位置。