C++ STL之unordered_map

hash_map未加入C++11标准

C++11标准加入unordered系列的容器unordered_map

map vs unordered_map: map底层实现为红黑树,时间复杂度为O(logn),unordered_map底层实现为哈希表,时间复杂度为O(1),均不能有重复的key,可使用[]运算符

  • 但是在数据量小的时候,unorder_map比map慢

原因在于unordered_map的初始化比较耗时,我们都知道map是红黑树,unordered_map是哈希表,造成性能差异的原因在于,红黑树初始化时,节点只需要一个,后续的插入只是插入新的节点,但是哈希表初始化时就不是那么简单了,哈希表初始化时需要申请一个数组,数组的每个元素都指向一条链表,所以初始化时需要申请很多内存,相比于map,的确更耗时。

map vs multimap: 均为红黑树底层实现,multimap支持重复的key,不能使用[]运算符

默认初始化为零(int),或空(string)

map.count(); //返回被查找的key是否存在 ,为1或0

map.find(); //返回被查找key 的位置,若没有则返回map.end()

map跟set使用举例:

//单词计数

map<string,int> wordcount;

set<string> exclude;

string word; 

while(cin>>word)

{

    if(exclude.find(word)==exclude.end())//排除word

      ++wordcount[word];

}

原文地址:https://www.cnblogs.com/lemon333333/p/10289660.html

时间: 2024-10-29 13:49:34

C++ STL之unordered_map的相关文章

使用STL来模拟Treap的功能

问题描述 我们知道,Treap可以完成节点的动态插入.删除.查询,其每个操作的时间复杂度是O(log n),因为其实现较红黑树更为简单,因此常常用于某些场合,以替换红黑树的实现. Treap的每个节点维护了key, priority. struct Node { int key; int priority; Node (int k, int p): key(k), priority(p) {} } key是作为BST的键值,用于支持快速的插入.删除和查询操作,而priority则是用于维护最小堆

STL常见用法

1.选择C++刷算法的理由 1.C++速度快(C不是更快么,java太慢了) 2.C++有STL(什么是STL)--使用很方便的类库 3.如何使用STL进行高效刷算法 4.好处:刷算法,学习成本极低 5.如何从C到C++(仅基础语法到刷算法程度) 俗话说:磨刀不误砍柴工 不会c++仍然可以做,但是效率低 2.输入输出 C++保留了C的scanf和printf,增加了额外的cin与cout 例子 2.1.C程序中输入输出 int a; scanf("%d",&a); printf

STL 常用方法

1. 选择 C++ 刷算法的理由 1.C++ 速度快(C 不是更快吗,Java 太慢了) 2.C++ 有 STL(什么是 STL)--性能强大,使用方便的标准库 3.如何使用 STL 进行高效刷算法 4.好处:刷算法,学习成本低 5.如何从 C 到 C++(仅基础语法到刷算法程度) 俗话说:磨刀不误砍柴工,不会 C++ 仍然可以刷算法,但是效率相对很低.在 ACM 或各类程序算法竞赛中相比于 Java 代码的冗长,C 的繁琐,Python 的性能低下,C++ 以兼顾简洁和高效脱颖而出. 2. 输

leetcode第1题(array)

题目: Given an array of integers, find two numbers such that they add up to a specific target number. The function twoSum should return indices of the two numbers such that they add up to the target, where index1 must be less than index2. Please note t

LintCode: Two Sum

C++ hash map 把查找2个数的过程转换为查找1个数 借用STL容器 unordered_map 1 class Solution { 2 public: 3 /* 4 * @param numbers : An array of Integer 5 * @param target : target = numbers[index1] + numbers[index2] 6 * @return : [index1+1, index2+1] (index1 < index2) 7 */ 8

.Net与CTS,CLS,CIL,CLR和C#

起源: .Net技术的起源可以说是一个最基本的观点,代码复用. 如何复用: 以前的复用方式就是类库,使用一个好的类库是非常令人舒心的事情,但现实往往令人沮丧,因为类库都是与语言绑定的,每种语言有自己的类库,比如js想使用stl的unordered_map,或者其他的c++库,需要实现与c++之间的相互调用. 怎么样才能使js方便的调用c++的类库呢?微软给了两个答案COM和.NET. COM这里就不讨论了,其实现原理是基于物理层面的,太复杂,尽管有MFC,ATL,依然非常复杂. 那么.NET呢,

一种基于Qt的可伸缩的全异步C/S架构服务器实现(六) 整合各个模块实现功能

在前面的章节中,介绍了网络传输.任务线程池.数据库和集群四个主要功能模块.到现在为止,这些模块都还只是一种资源,没有产生实际的运行效果.对一个具备真实功能的应用来说,需要有一个整合的过程.整合方法很多,这里以典型的客户 -客户通信来举例说明. (一)类结构 1."客户端" 这个概念被抽象为一个节点类st_clientNode,每个客户端连接对应了该类的一个实例.这个类不但存储了有关该连接的所有背景信息(比如聊天程序中的用户名等),还提供了正确解释数据流的代码实现.由于想分开传输层和应用

C++软件开发面试题总结

面试题有难有易,不能因为容易,我们就轻视,更不能因为难,我们就放弃.我们面对高薪就业的态度永远不变,那就是坚持.坚持.再坚持.出现问题,找原因:遇到困难,想办法.我们一直坚信只有在坚持中才能看到希望,而不是看到希望才去坚持. 人生没有如果,只有结果和后果.既然选择了,就不后悔.年轻就是资本,年轻就要吃苦,就要历练.就要学会在坚持中成长.如此感慨,至深的心得体会,绝对的经验之谈. 1. Static有什么用途? (1)函数体内static变量的作用范围是该函数体,该变量的内存只被分配一次,因此它的

(寒假练习 AcWing 870)约数个数(数论)

原题链接(戳我-) 题目描述 给定n个正整数ai,请你输出这些数的乘积的约数个数,答案对109+7取模. 输入格式 第一行包含整数n. 接下来n行,每行包含一个整数ai. 输出格式 输出一个整数,表示所给正整数的乘积的约数个数,答案需对109+7取模. 数据范围 $ 1≤n≤100,$ \(1≤ai≤2?10^9\) 输入样例: 3 2 6 8 输出样例: 12 解题思路 根据算数的进本定理可知任何一个大于1的自然数N,如果N不为质数,那么N可以唯一分解成有限个质数的乘积 \(N=P_1^{a_