zoukankan      html  css  js  c++  java
  • 第10章 关联容器(C++ Primer)

    关联容器是标准库容器类型的另一项内容。与顺序容器的本质差别在于:关联容器通过键(key)存储和读取元素,而顺序容器则通过元素在容器中的位置顺序存储和访问元素。

    关联容器(associative container)支持通过键来高效地查找和读取元素。两个基本的关联容器类型是map和set。map的元素以键-值(key-value)对的形式组织:键用作元素在map中的索引,而值则表示所存储和读取的数据。set仅包含一个键,并有效地支持关于某个键是否存在的查询。

    map         关联数组,元素通过键来存储和读取
    set         大小可变的集合,支持通过键实现的快速读取
    multimap    支持同一个键多次出现的map类型
    multiset    支持同一个键多次出现的set类型

    10.2 关联容器

    关联容器共享大部分——但并非全部——的顺序容器操作。关联容器不提供front、push_front 、pop_front、back、push_back以及pop_back。

    10.3 map类型

    map是键-值对的集合。map类型通常可理解为关联数组:可使用键作为下标来获取一个值,正如内置数据类型一样。而关联的本质在于元素的值与某个特定的键相关联,而并非通过元素在数组中的位置来获取。

    10.3.1 map对象的定义

    要使用map对象,则必须包含map头文件。在定义map对象时,必须分别指明键和值得类型。

    map<string, int> word_count;
    map<k, v> m;       创建一个名为m的空的map对象,其键和值得类型分别为k和v
    map<k, v> m(m2);   创建一个m2的副本m,m与m2必须有相同的键类型和值类型
    map<k, v> m(b ,e); 创建map类型的对象m,存储迭代器b和e标记的范围内的左右元素的副本。元素的类型必须能转换为pair<const k, v>

     对于键类型,唯一的约束就是必须支持 < 操作符,至于是否支持其他的关系或相等运算,则不作要求。

    10.3.2 map定义的类型

    map对象的元素是键-值对,也即每个元素包含两个部分:键以及由键关联的值。

    map<K, V>::key_type        在map容器中,用作索引的键的类型 
    map<K, V>::mapped_type     在map容器中,键所关联的值的类型
    map<K, V>::value_type      一个pair类型,它的first元素具有const map<K, V>::key_type类型,它的second元素为map<K, V>::mapped_type类型

    value_type是存储元素的键以及值的pair类型,而且键为const。它的值成员可以修改,但键成员不能修改。

    1.map迭代器进行解引用将产生pair类型的对象

    对迭代器进行解引用时,将获得一个引用,指向容器中一个value_type类型的值。对于map,其value_type是pair类型。

    1 map<string, int>::iterator map_it = word_count.begin();
    2 cout << map_it->first;
    3 cout << " " << map_it->second;
    4 map_it->first = "new key";  //error: key is const
    5 ++map_it->second;           //we can change value through an iterator

     10.3.3 给map添加元素

      给map添加元素,可以用insert成员实现;或者先用下标操作符获取元素,然后给获取的元素赋值。

    10.3.4 使用下标访问map对象

    1 map <string, int> word_count;
    2 word_count["Anna"] = 1;

      在执行上述代码时,将发生以下事情:

    1)在word_count中查找键为Anna的元素,没有找到

    2)将一个新的键-值对插入到word_count中,它的键为const string类型的对象,保存Anna。而它的值采用值初始化,为0

    3)将这个新的键-值对插入到word_count中

    4)读取新插入的元素,并将它的值赋为1

      如同其他下标操作一样,map的下标也使用索引来获取该键所关联的值。如果该键已在容器中,则map的下标运算与vector的下标运算相同:返回该键所关联的值。只有在所查找的键不存在时,map容器才为该键创建一个新的元素,并将它插入到此map对象中。

  • 相关阅读:
    操盘之王 摘要
    转贴:Icon Design Guidelines, Android 2.0
    低端用户反文化这个问题真这么简单?
    关于沟通的一些细节(二)主动权
    不仅仅是开发控件《道不远人深入解析ASP.NET 2.0控件开发》作者序
    partition生成规则
    linux send与recv函数详解
    exec函数族实例解析
    在ubuntu 下 编译 在windows 下面使用的adb
    Android属性之build.prop生成过程分析
  • 原文地址:https://www.cnblogs.com/cinvzi/p/8005537.html
Copyright © 2011-2022 走看看