1.简介
关联容器支持高效的关键字查找和访问,两个主要的关联容器类型是map和set。
map中的元素是一些关键字和值,关键字起索引作用
set中只包含一个关键字。
2.汇总
有序容器在插入时,会自动插入到合适的位置,使整个集合有序
3.分类使用
1.有序容器
set<int> a = {1,2,9};
//插入元素
a.insert({5,6});
for(auto it = a.begin();it != a.end();it++) cout << *it;//输出12569,插入时自动排序,
//插入一个区间
set<int b> = {4,5};
auto first = b.begin();
auto second = b.end();
a.insert(first,second); //将b的所有元素插入到a中
//删除元素
a.erase(3); //删除关键字为3的元素,返回删除的个数
a.erase(first,second); //删除区间,返回指向second
a.erase(iterator); //删除迭代器指向的元素
map<string, int> b2 = { {"first",3}}; //注意里面还有一个大括号
//插入元素
b2.insert(make_pair("second",5)); //使用insert插入
b2.insert({"second",5});
b2.insert(map<string,int>::value_type("second",5));
b2["second"] = 5; //使用下标插入,如果有该关键字的话,会直接更改值,如果没有会插入
b2.at("first") = 4; //更改值,如果没有关键字,会发生错误
//删除元素
b2.erase("second"); //删除关键字为second的元素
auto pr = b2.begin();
b2.erase(pr); //删除pr指向的元素
map的遍历
每一个元素可以看成是pair类型,第一个key用it->first访问,值用it->second来访问。同样可以采用下标来访问
//multimap支持重复的关键字,故不能使用下标来进行访问和修改
multimap<string, int> b2 = { {"first",3},{ "first",5 } };
b2.insert({ "second", 6 });
for (auto it = b2.cbegin(); it != b2.cend(); it++)
cout << it->first << " " << it->second << endl;
//查找元素
auto num = b2.count("first");
auto iter = b2.find("first");
while (num)
{
cout << iter->first << ":" << iter->second << endl;
iter++;
num--;
}
2.无序容器
无序容器的操作基本和有序容器一致,多了一些特殊操作: