c++Primer——第十一章:关联容器

1、关键字类型要求

对于有序容器——map、multimap、set、multiset,关键字类型必须定义元素比较的方法。默认情况下,标准库使用<运算符比较关键字。

习题11.10:可以定义vector::iterator到int的map,但是不能定义list::iterator到int的map。因为list的迭代器不支持比较运算。

2、关联容器的迭代器

map的迭代器的first成员保存的是const 的关键字,set的迭代器是const的,虽然他也定义了一个iterator和一个const iterator。

std::map simap{ {"a",1} };
std::set iset{ 1,2,3 };
auto map_itr = simap.begin();
auto set_itr = iset.begin();
map_itr->second = 2;
map_itr->first = "b";	//错误 关键字是const的
*set_itr = 5; //错误 set的关键字是const的

3、遍历关联容器

当使用一个迭代器遍历一个map、multimap、set或multiset时。迭代器按关键字升序遍历元素。

4、map的下标操作

map提供下标运算符 [] 和一个对应的at函数。与其他下标运算符不同的是 若关键字不存在,则创建一个元素插入,而at函数不会

map map2; // 0
cout << map2.size() << endl;
if (map2[5]) {} // 正确  会添加一个{5,0}
if (map2.at(4)) {} //错误 抛出out_of_range异常
cout << map2.size() << endl; // 1

5、无序容器对关键字类型的要求

标准库为内置类型(包括指针)提供了hash模板,还有一些标准库类型,包括string和只能指针定义了hash,因此可以直接使用这些类型的无序容器,但不能直接定义关键字类型为自定义类类型的无序容器。

你可能感兴趣的:(c++Primer,c++)