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

1、关键字类型要求

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

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

2、关联容器的迭代器

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

std::map<std::string, int> simap{ {"a",1} };
std::set<int> 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<int, int> 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,因此可以直接使用这些类型的无序容器,但不能直接定义关键字类型为自定义类类型的无序容器。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值