码迷,mamicode.com
首页 > 编程语言 > 详细

C++关联容器set和map的概述和操作

时间:2020-07-19 17:45:10      阅读:61      评论:0      收藏:0      [点我收藏+]

标签:数组   map   out   初始   顺序容器   cto   元素   ISE   word   

关联容器

关联容器和顺序容器(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

C++关联容器set和map的概述和操作

标签:数组   map   out   初始   顺序容器   cto   元素   ISE   word   

原文地址:https://www.cnblogs.com/Neko-YG/p/13339700.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!