【C++笔记】C++关联容器set和map的概述和操作

以下内容仍在更新完善...

关联容器

关联容器和顺序容器(list、que等)有根本的的不同:关联容器中的元素是按照关键字来保存的,不同于顺序容器中的元素是按他们在容器中的位置来顺序保存和访问。

主要的关联容器有:mapset

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

 可见,multiset中保存了相同的关键字,而set中不能保存重复的关键字

原文链接: https://www.cnblogs.com/Neko-YG/p/13339700.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;

也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬

    【C++笔记】C++关联容器set和map的概述和操作

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/368342

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年3月2日 下午6:21
下一篇 2023年3月2日 下午6:21

相关推荐