11.2 关联容器概述
关联容器支持容器的通用操作,比如size_type这种类型,insert,erase,clear操作,以及值初始化等等。
这些都在9.2节里面。
11.2.1 定义关联容器
定义map需要指定关键字和值的类型。
定义set,需要指定关键字的类型。
在进行初始化时,
1.可以使用同类型的容器进行拷贝
2.也可以使用迭代器范围,只要迭代器内的元素可以转化为map的值的类型或者set的关键字的类型
3.可以使用值初始化。
map的值初始化,需要同时写上key和value。
map<string,string> authors = {
{
"a","A"},
{
"b","B"},
{
"c","c"}
};
对于mutimap和mutiset的初始化也是一样的,但是mutimap,和mutiset可以让一个key对应着多个value。
为了方便理解,就认为set的key和value是一个值。
练习
11.5
map是key-value对的集合,set是key的结合。如果我们需要通过一个关键字查找某一个值,则使用map。我们只是简单的查找集合中,元素是否存在,则使用set。
11.6
set是key的集合,是关联容器,list可以顺序容器。
set按照关键字来查找元素,而list通过元素在容器中的位置来访问元素。
如果我们需要快速查找某个元素是否存在,可以使用set,如果需要在容器中频繁的插入和删除,使用list。
11.7
map<string, vector<string>> family= {
{
"A",{
"hello","world"}},
{
"B",{
"dd","bbbb","cccc"}}
};
vector<string> new_item = {
"cc","ccc"};
family["C"] = new_item;
family["A"].push_back("aaa");
for (const auto& item:family) {
cout << item.first<<":"<< std::ends;
for (const auto& member:item.second) {
cout << member << std::ends;
}
cout << endl;
}
11.8