• C++容器(二):关联容器简介


    关联容器(associative container)与顺序容器的本质区别在于:关联容器通过键(Key)存储和读取元素,而顺序容器则通过元素在容器中的位置顺序存储和访问元素。虽然,关联容器的大部分行为与顺序容器相同,但其独特之处在于支持键的使用。

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

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

    一般来说,如果希望有效的存储不同值的集合,那么set容器比较合适,而map容器则更适用于需要存储(乃至修改)每个键所关联值的情况。在做某种文本处理时,可使用set保存要忽略的单词。而字典则是map的一种很好的应用:单词本身是键,而它的解释说明则是值。

    mapset类型的对象所包含的元素都具有不同的键,不允许同一个键添加第二个元素。如果一个键必须对应多个实例,则需要使用multimapmultiset类型。

    关联容器共享大部分—但并非全部—的顺序容器操作。关联容器不提供front,push_front,back,push_backpop_back操作。

    总结来说,顺序容器与关联容器公共的操作包括以下几种:

    • 三种构造函数:
    C<T> c;  // creates an empty container
    
    // c2 must be same type as c1
    C<T> c1(c2);  // copies elements from c2 to c1
    
    // b and e are iterators denoting a sequence
    C<T> c(b, e); // copies elements from the sequence into c 

    关联容器不能通过容器的大小来定义。

    • 关系运算(例如==, <, >等)。

    • begin, end, rbeginrend操作。

    • 类型别名(typedef)。 注意,对于map容器,value_type并非元素的类型,而是描述键及其关联值类型的pair类型。对于这一点将在map类型的介绍中讲解。

    • swap和赋值操作。但是关联容器不提供assign函数。

    • clearerase操作。但是关联容器的erase运算返回void类型。

    • 关于容器大小的操作。但resize函数不能用于关联容器。

    参考文献:

    • C++ Primer中文版(第四版)》,Stanley B.Lippman et al. 著, 人民邮电出版社,2013。
  • 相关阅读:
    Scrapy+Scrapy-redis+Scrapyd+Gerapy 分布式爬虫框架整合
    centos7 安装软件指南
    Kafka--消费者
    Kafka--生产者
    Kafka--初识Kafka
    Kafka--Kafka简述
    NetWork--记一次Http和TLS抓包
    JVM--a == (a = b)基于栈的解释器执行过程
    Java容器--Queue
    Idea--使用Idea调试设置
  • 原文地址:https://www.cnblogs.com/hehehaha/p/6332237.html
Copyright © 2020-2023  润新知