C++关联容器

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.无序容器

无序容器的操作基本和有序容器一致,多了一些特殊操作:

posted @ 2020-09-29 16:25  penuel  阅读(234)  评论(0编辑  收藏  举报