zoukankan      html  css  js  c++  java
  • 【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中不能保存重复的关键字

  • 相关阅读:
    《人月神话》读书笔记二
    正则表达式进阶篇
    Zend Framework学习之自定义认证适配器
    Zend Framework学习之常用校验器
    Zend Framework学习之Zend_Mail
    《人月神话》读书笔记一
    Zend Framework学习之校验器Zend_Validate
    我的第一个C++程序
    Zend Framework学习之Zend_Filter_StripTags
    《黑客与画家》读书笔记三(完结)
  • 原文地址:https://www.cnblogs.com/Neko-YG/p/13339700.html
Copyright © 2011-2022 走看看