关联容器支持关键字查找和访问。两个主要类型是map和set。一个unordered multi_set是一个允许重复的关键字的,元素无序保存,一个set是一个要求不重复关键字的,有序存储的集合。
map和multimap的头文件map中,set,multiset在set中。set只是查看关键字是否存在。
map<string,size_t> word_count;
string word;
++ word_count[word];
for (const auto &w:word_count)#(取了之后,后续操作有可能会改动该变量,声明了const就不让你改)
cout<<w.first<<w.second<<endl;
#pair <first,second>
set
set<string> exclude = {"the","end"}
map的初始化:map<string,size_t>authors = {{"joy","ey"},{"",""}}
string word;
cin>>word;
if (exclude.find(word) == exclude.end())#没找到(find返回一个迭代器,)
关联容器根据关键字存储,不能对位置操作。
multimap:
多个元素有相同的关键字vector<int>vec;
for(vector<int>::size_type i = 0 ;i!= 10; ++i)
{
vec.push_back(i);
vec.push_back(i);
}
set<int> iset(vec,cbegin(),vec.cend());
multiset<int>miset(vec,cbegin(),ivec.cend())
map中key_type,mapped_type关键字类型与值的类型
插入元素:set.insert(vec.cbegin(),vec.cend())
set.insert({1,2})
word.insert({word,1}) word.insert(make_pair(word,1))
删除 erase()
c.erase(b,e)删除范围
c[k]返回关键字k的元素,没有时进行初始化
c.at(k) 返回元素,不在时返回异常
set.find(11)返回一个迭代器,指向key=1 的元素或者返回set.end()
set.couont(1),返回个数或者0
,map中 swap的用法:
Map中的swap不是一个容器中的元素交换,而是两个容器交换;
For example:
#include <map>
#include <iostream>
using namespace std;
.map的sort问题:
Map中的元素是自动按key升序排序,所以不能对map用sort函数:
For example:
#include <map>
#include <iostream>
迭代器:set<int> iset = {}
set<int>::iterator set_it = iset.begin()
if(set_it != set.end())
{
cout<<*set_it 只读的}
map.find()返回时迭代器,指示的是找到的元素的位置