标签:数组 map out 初始 顺序容器 cto 元素 ISE word
关联容器
关联容器和顺序容器(list、que等)有根本的的不同:关联容器中的元素是按照关键字来保存的,不同于顺序容器中的元素是按他们在容器中的位置来顺序保存和访问。
主要的关联容器有:map和set。
Map类型通常被称为关联数组,其中的元素是关键字-值(key-value)对,关键字起索引作用,值是与索引相关联的数据。字典就是一个典型的map,词语是关键字,而词语的释义就是值。
Set中的每个元素则只包含一个关键字。
标准库中提供8个关联容器:
按关键字有序保存元素
map 关联数组
set 关键字即值(只保存关键字的容器)
multimap 关键字可重复出现的map
multiset 关键字可重复出现的set
无序集合
unordered_map 用哈希函数组织的map
unordered_set 用哈希函数组织的set
unordered_multimap 哈希函数组织的关键字可以重复出现的map
unordered_multiset 哈希函数组织的关键字可以重复出现的set
关联容器的操作
关联容器支持普通容器造作,但不支持顺序容器的位置相关的操作,例如push_front或是push_back
关联容器还支持一些顺序容器不支持的操作。
定义关联容器
定义一个map时,需要指明关键字类型和值的类型,定义一个set是只需要指明关键字类型。
代码示例:
map<string, size_t> word_count; //空容器
set<string> exclude = {"the","cut","and"};
map<string , string> authors = {{"Joyce","James"},{"Austen","Jane"}};
初始化 multimap 或 multiset
下面的例子使用一个名为ivec的保存int类型值得vector,它包含20个元素,将使用此vector初始化multimap 或 multiset
vector<int> ivec;
for(vector<int>::size_type i = 0 ;i != 10 ; ++i){
ivec.push_back(i);
ivec.push_back(i);//每个数重复保存
}
set<int> iset(ivec.cbegin(), ivec.cend());
multiset<int> miset(ivec.cbegin(),ivec.cend());
cout<< ivec.size()<<endl; //打印出20
cout<<iset.size()<<endl; //打印出10
cout<<miset.size()<<endl; //打印出20
标签:数组 map out 初始 顺序容器 cto 元素 ISE word
原文地址:https://www.cnblogs.com/Neko-YG/p/13339700.html