`
584506509
  • 浏览: 11469 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

set/map/multiset/multimap hashset/hashmap/hashmultset/hashmultimap之不同

阅读更多

        set(集合)、 map(映射表)、 multiset(多键集合) 、multimap(多键映射表),这些容器均以RB-tree完成(是一种比较均衡的二叉树);

        hash_set(散列集合)、hash_map(散列映射表)、hash_multiset(散列多键集合)、hash_multimap(散列多键映射表)是以hashtable(散列表--一种链表数组)为底层机制完成。

        这些关联式容器,类似关联式数据库,每笔数据或每个元素都有一个键值(key)和一个实值(value),即所谓的Key-Value(键-值对)。当元素被插入到关联式容器中时,容器内部结构(RB-tree/hashtable)便依照其键值大小,以某种特定规则将这个元素放置于适当位置。

         set,同map一样,所有元素都会根据元素的键值自动被排序,因为set/map两者的所有各种操作,都只是转而调用RB-tree的操作行为,不过,值得注意的是,两者都不允许两个元素有相同的键值。

        不同的是:set的元素不像map那样可以同时拥有实值(value)和键值(key),set元素的键值就是实值,实值就是键值,而map的所有元素都是pair,同时拥有实值(value)和键值(key),pair的第一个元素被视为键值,第二个元素被视为实值。

        至于multiset/multimap,他们的特性及用法和set/map完全相同,唯一的差别就在于它们允许键值重复,即所有的插入操作基于RB-tree的insert_equal()而非insert_unique()。

        hash_set/hash_map,两者的一切操作都是基于hashtable之上。不同的是,hash_set同set一样,同时拥有实值和键值,且实质就是键值,键值就是实值,而hash_map同map一样,每一个元素同时拥有一个实值(value)和一个键值(key),所以其使用方式,和上面的map基本相同。但由于hash_set/hash_map都是基于hashtable之上,所以不具备自动排序功能。因为hashtable没有自动排序功能。

       至于hash_multiset/hash_multimap的特性与上面的multiset/multimap完全相同,唯一的差别就是它们hash_multiset/hash_multimap的底层实现机制是hashtable(而multiset/multimap,上面说了,底层实现机制是RB-tree),所以它们的元素都不会被自动排序,不过也都允许键值重复。

       所以,综上,说白了,什么样的结构决定其什么样的性质,因为set/map/multiset/multimap都是基于RB-tree之上,所以有自动排序功能,而hash_set/hash_map/hash_multiset/hash_multimap都是基于hashtable之上,所以不含有自动排序功能,至于加个前缀multi_无非就是允许键值重复而已。

分享到:
评论

相关推荐

    C++模板(vector、map、multimap、set、multiset)

    一共四个doc文件,list综合实例、multimap和map的实例、set和multiset的综合实例、vector综合实例

    AVL_Tree实现STL中的map, set, multimap和multiset

    用AVL-tree数据结构作为底层机制,以STL底层空间配置器和iterator_traits编程技法实作出一个独立的关联式容器(map, set, multimap, multiset),并对外提供接口实现和STL完全兼容的容器。

    Set:Swift中Multiset和PredicateSet的实现

    Multiset ( 1 , 2 , 3 ) + Multiset ( 3 , 4 , 5 ) // == Multiset(1, 2, 3, 3, 4, 5) // Difference Multiset ( 1 , 2 , 3 ) - Multiset ( 2 , 3 ) // == Multiset(1) // Intersection Multiset ( 1 , 2 , 3 ) & ...

    C++ STL入门教程(7) multimap、multiset的使用

    C++ multimap和map所支持的操作相同(除了multimap不支持下标运算),但是multimap允许重复的元素。 完整程序代码: /*请务必运行以下程序后对照阅读*/ ///头文件依旧是map #include <map> #include #include ...

    stl详解 包括各种实例代码

    七、map / multimap 映射与多重映射 15 map成员函数: 15 Map实例程序: 17 MultiMap实例程序: 18 八、set / multiset 集合与多重集合 19 成员函数: 19 Set实例程序: 20 MultiSet实例程序: 21 九、deque (Double...

    go-web:后端开发指南(笔记)

    unordered_multiset map multimap unordered_map unordered_multimap algorithm 其它 实现自定义排序规则 Python 攻略 基本数据类型 生成器 文件操作 并发 三方库 jieba wordcloud Python 连接数据库 Web 开发 爬虫 ...

    MyStl:自己实现STL

    关联容器:set,map,multiset,multimap 无序关联容器:unordered_set,unordered_map,unordered_multiset,unordered_multimap 容器均支持列表初始化,重载了相关迭代器的bool类型转换运算符以支持用于条件判断 ...

    细讲c++ 各种STL容器的应用场合及性能

    c++ std stl各容器的应用场合及性能 map hash_map unordered_map multimap list forward_list vector set hash_set multiset unsorted_set queue deque priority_queue

    ft_container:做我的容器

    ft_container 做我的容器 42个项目ft_container ...make map / remap make stack / restack make queue / requeue make set / reset make multimap / remultimap make multiset / remultiset 学习STL

    Map和Set的区别

    set只有值,可以认为只有一个数据,并且set中元素不可以重复且自动排序,如果需要重复则使用multiset,要说区别的话,存储的东西不一样,应用场景不一样,支持的操作也不一样,很多不同。  map和set支持快速查找和...

    红黑树: 理论与实现

    红黑树是一种很有意思的平衡检索树。...在C++ STL中,很多部分(目前包括set, multiset, map, multimap)应用了红黑树的变体(SGI STL中的红黑树有一些变化,这些修改提供了更好的性能,以及对set操作的支持)。

    oracle cast (multiset()as )用法

    通过实例介绍了 cast(multiset() as) 的使用方法,以处理嵌套表的操作

    C++STL实验报告-迭代器和非变异算法

    本实验主要练习容器set、multiset、map、multimap的使用方法,插入迭代器、反向迭代器的用法,以及四种非变异算法的基本用法。 实验器材: VScode 实验内容: 一.回顾以上四种容器相关的例题(不作为实验报告内容)...

    STL_multiset和STL_set–算法–笔记

    STLSTL_multisetSTL_set STL_multiset 方法:multisetst; 定义了一个multiset变量st,st里面可以存放T类型数据,并且能自动排序。开始st为空 排序规则:表达式”a<b为true,则a排在b前面 可用的方法 目的 格式 ...

    unordered_flat_set:C ++连续内存哈希容器。-开源

    连续内存开放式寻址/封闭式散列,带有线性探测,容器。 基本上是unordered_set,unordered_map,unordered_multiset和unordered_multimap,但具有类似内存分配的向量。

    STL容器multiset的使用

    stl容器multiset的使用 包含6.0代码 以及详细的文档说明

    c++容器使用经验

    标准STL序列容器:vector、string、deque和list。 标准STL关联容器:set、multiset、map和multimap。

    Almeza MultiSet Pro 7.8.1绿色版

    MultiSet是一款界面简洁的自动程序安装工具。不需要编写程序,用这个程序可以是你从大量的程序安装过程中解放出来。并且可以在安装过程中实现注册信息的输入 Almeza MultiSet Pro 7.8.1绿色版 自动程序安装

    C++ STL 开发技术导引(随书源码)

    【内容简介】 C++ STL标准模板库在数据结构和算法的实践领域发挥着重要的...第12章 multiset多重集合容器 第13章 map映照容器 第14章 multimap多重映照容器 第15章 hash_set哈希集合容器 第16章 hash_map哈希映照容器

Global site tag (gtag.js) - Google Analytics