【C++】unordered

您所在的位置:网站首页 set和setting区别 【C++】unordered

【C++】unordered

#【C++】unordered| 来源: 网络整理| 查看: 265

文章目录 1.unordered系列关联式容器2. unordered_map3.unordered_set

1.unordered系列关联式容器

在C++98中,STL提供了底层为红黑树结构的一系列关联式容器,如map和set,它们在查询时效率可达logN,即最差情况下需要比较红黑树的高度次,当树中的节点非常多时,查询效率会降低。

因此在C++11中STL又提供了4个unordered系列的关联式容器,unordered_map,unordered_set和unordered_multimap,unordered_multiset,这四个容器与红黑树结构的关联式容器使用方式基本类似,只是其底层结构不同。

在学习unordered_set和unordered_map之前最好先认识熟悉一下map和set,有关map和set的解释与用法,请移步至这篇文章: map与set用法详解

那么在C++中unordered_map和map,unordered_set和set有什么区别呢?

最大的几个区别在于:底层结构,数据是否有序,在不同场景下的性能。

(C++98) set/map的底层结构是由红黑树(平衡二叉树搜索树)实现的,迭代器遍历(中序遍历),得到的数据是有序的,并且具有双向迭代器。在Java中,对它们的命名更直观,java中map和set,叫做TreeSet/TreeMap。

(C++11)unordered_set/unordered_map的底层结构是由哈希表实现的,迭代器遍历的结果是无序的,并且只有单向迭代器。关键点在于,unordered系列的关联式容器查找效率非常高,Hash表通过把关键码值映射到Hash表中的某个位置,来访问记录,查找的时间复杂度可达到O(1),在海量数据处理中有着广泛的应用。java中称之为HashSet/HashMap。

下面我们利用简单的代码,测试一下set与unordered_set的各个函数接口的性能。

#include #include #include #include #include #include #include #include using namespace std; int main() { const size_t N = 10000; unordered_set us; set s; vector v; v.reserve(N); srand(time(0)); for (size_t i = 0; i s.insert(e); } size_t end1 = clock(); cout s.find(e); } size_t end3 = clock(); cout s.erase(e); } size_t end5 = clock(); cout string arr[] = { "西瓜","西瓜","苹果","西瓜","苹果","苹果","西瓜","苹果","香蕉","苹果","香蕉","梨" }; map countMap; for (auto& e : arr) { countMap[e]++; } for (auto& kv : countMap) { cout cout


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3