关联容器分有序和无序。
有序容器的名称们 | 简介 |
---|---|
map | 关联数组,保存键-值对 |
set | 关键字就是它的值,只保存关键字 |
multimap | 关键字可以重复出现的map |
multiset | 关键字可以重复出现的set |
无序容器的名称们 | 简介 |
---|---|
unordered_map | 哈希函数组织的map |
unordered_set | 哈希函数组织的set |
unordered_multimap | 关键字可以重复出现的哈希函数组织的map |
unoedered_multiset | 关键字可以重复出现的哈希函数组织的set |
两个主要的关联容器是map和set。
总结map/multimap
1.定义一个map
map<string,int> Person;
2.向map里添加元素
map<string,int> Company;
string word("X");
Company.insert({word,15});
/*
这个方法返回值是
auto ret = pair<map<string,int> :: iterator,bool>
ret.first是这个元素的迭代器,如果这个元素之前存在,返回旧元素的迭代器,否则返回新位置的迭代器
ret.second标志是否插入成功。如果元素之前已经存在,则insert什么也不做
*/
Company["Baidu"] = 17;
/*
向Company添加关键字是"Baidu",值是17的元素
*/
3.对map进行下标操作。
map<string,int> Company;
Company[K];
/*
返回关键字是K的元素。如果没有K这个关键字,就添加一个关键字是K的元素,对其初始化
*/
Company.at(K);
/*
访问关键字是K的元素,有参数检查的过程,如果没有K这个关键字,就抛出out_of_range的异常
*/
4.访问map中的元素
map<string,int> Company;
Company.find(K);//返回一个迭代器,指向关键字是K的元素
Company.count(K);//返回关键字为K的元素的数量
Company.lower_bound(K);//返回迭代器指向关键字不小于K的第一个元素
Company.upper_bound(K);//返回迭代器指向关键字大于K的第一个元素
Company.equal_range(K);//返回迭代器,表示关键字是K的元素的范围
5.获取map元素各数
map<string,int> Company;
Company.size();
6.清空和判空
map<string,int> Company;
Company.clear();//容器清空
Company.empty();//容器判空
7.删除容器中元素
map<string,int> Company;
Company.erase(K);//删除建是K的元素
Company.erase(pos);//删除pos位置的元素
Company.erase(b,e);//删除从b到e的所有元素
总结set/multiset
1.构造set
set<int> Grade;
2.添加元素
set<int> Grade;
Grade.insert(10);//和map的insert方法同理
3.查找容器中元素
set<int> Grade;
Grade.find(K);
//返回一个迭代器,指向值是K的元素。如果没有,返回尾后迭代器
Grade.count(K);//返回值为K的元素的数量
Grade.lower_bound(K);//返回的迭代器指向值不小于K的第一个元素
Grade.upper_bound(K);//返回的迭代器指向值大于K的第一个元素
Grade.equal_range(K);//返回的迭代器,表示值是K的元素的范围
4.遍历
set<int> Grade;
set<int> :: iterator iter = Grade.begin();
while(iter != Grade.end() ) {
cout << iter -> first << " : " << iter -> second << endl;
iter ++;
}
5.清空判空,初始化,访问
set/multiset和map/multimap类似。