C++ STL unordered_map】的更多相关文章

使用Windows下 RECT 类型做unordered_map 键值 1. Hash 函数 计算自定义类型的hash值. struct hash_RECT { size_t operator()(const RECT &rc) const { return std::_Hash_seq((const unsigned char *)&rc, sizeof(RECT)); } }; 2. 相等函数 哈希需要处理碰撞,意味着必须判断两个自定义类型对象是否相等. struct cmp_RECT…
unordered_map: 和 unorder_set 相似,该容器内部同样根据 hash value 把键值对存放到相应的 bucket(slot)中,根据单个 key 来访问 value 的速度很快. unordered_multimap: 操作和 unorder_map 相同,不同点是 key 可以重复.通过 it.first(it->first) 访问 key 或者 it.second(it->second) 访问 mapped value. Iterators(只有有序的容器才有…
容器unordered_map<key type,value tyep>m; 迭代器unordered_map<key type,value tyep>::iterator it; erase函数: 关于erase 函数,可以删除一个iterator位置的元素(1),可以删除从first迭代器到last迭代器的元素(2),可以删除某个key对应的元素(3):…
C++ STL unordered_map用法 在C++11中,unordered_map作为一种关联容器,替代了hash_map,unordered_map的底层实现是hash表,所以被称为无序关联容器. 不管是map还是unordered_map都是一种 key-map(value) 映射的容器,提供非常高的查找效率,下面我们来了解unordered_map的用法. 预备知识 在讲解unordered_map之前,我们先得了解一些预备知识: 元素类型 除常用的语言内置类型以外,unorder…
最近几天我要整理一下遇到的STL的函数,本来其实我是没有打算学的,认为用C就完全可以实现,干嘛要记那么多复杂的函数呢,所以我之前的做法都是将常用的C函数自己做了一个lib库,使用起来也是蛮方便的呢,但是最近在做leetcode的题时,发现如果使用自己的函数来实现,不只是代码量迅速的上升,而且当遇到指针内存分配的时候,问题也就更复杂了,当看到人家调用几行的STL函数就把功能实现而且代码的可读性也非常的好.这就促使我要探一探STL的函数库.几天就先谈一谈STL::unordered_map吧,同时也…
题目 Design and implement a data structure for Least Recently Used (LRU) cache. It should support the following operations: get and set. get(key) - Get the value (will always be positive) of the key if the key exists in the cache, otherwise return -1.s…
今天做一个简单的算法题,居然用了1个小时,STL unordered_map用多了,没想到map这次派上了用场,这里记录一下: 算法题为 给一个字符串例如  abaaba,每连续两个字符组成一个子串 ab, ba, aa,ab,ba,统计出现的个数,按照个数大小排序打印,这里 ab 2次,ba两次,aa 1次,如果都是一样的次数,按照字典顺序打印,例如这里ab 和ba都是2次,那么先打印ab 然后是ba 最后 是aa; 算法:找出字串,然后用map记录这个string和它出现的个数,注意要用ma…
链表测试框架示例: // leetcodeList.cpp : 定义控制台应用程序的入口点.vs2013 测试通过 // #include "stdafx.h" #include <Windows.h> #include <iostream> using namespace std; struct ListNode { int val; ListNode *next; ListNode(int x) : val(x), next(nullptr){}; }; v…
1.类型与变量相关 1.1.nullptr: 取代了NULL,专用于空指针 1.2.constexpr: 近似const, 可以修饰变量,也可以修饰函数, 修饰变量如: const int global = 100; int main () { int temp = 100: constexpr int a = 1; //right constexpr int b = global; //right constexpr int c = temp; //wrong } 既可以赋值字面常量也可以赋值…
1.类型与变量相关 1.1.nullptr: 取代了NULL,专用于空指针 1.2.constexpr: 近似const, 可以修饰变量,也可以修饰函数, 修饰变量如: const int global = 100; int main () { int temp = 100: constexpr int a = 1; //right constexpr int b = global; //right constexpr int c = temp; //wrong } 既可以赋值字面常量也可以赋值…
map /multimap map是STL里重要容器之一. 它的特性总结来讲就是:所有元素都会根据元素的键值key自动排序(也可根据自定义的仿函数进行自定义排序),其中的每个元素都是<key, value>的键值对,map中不允许有键值相同的元素, 因此map中元素的键值key不能修改,但是可以通过key修改与其对应的value.如果一定要修改与value对应的键值key,可将已存在的key删除掉,然后重新插入. 定义原型: 它作用应用场景可用作 ①字典    ②统计次数 相关操作 (1)插入…
转自https://blog.csdn.net/liumou111/article/details/49252645 在之前使用STL时,经常混淆的几个数据结构,特别是做Leetcode的题目时,对于使用哪一个map,一直没有太明确的概念,事实上,三个容器,有着比较大的区别. 1. map   内部数据的组织,基于红黑树实现,红黑树具有自动排序的功能,因此map内部所有的数据,在任何时候,都是有序的. 2. hash_map   基于哈希表,数据插入和查找的时间复杂度很低,几乎是常数时间,而代价…
stl:即标准模板库,该库包含了诸多在计算机科学领域里所常用的基本数据结构和基本算法 六大组件: 容器.迭代器.算法.仿函数.空间配置器.迭代适配器 迭代器:迭代器(iterator)是一种抽象的设计理念,通过迭代器可以在不了解容器内部原理的情况下遍历容器.除此之外,STL中迭代器一个最重要的作用就是作为容器(vector,list等)与STL算法的粘结剂,只要容器提供迭代器的接口,同一套算法代码可以利用在完全不同的容器中,这是抽象思想的经典应用.迭代器是STL中行为类似指针的设计模式,它可以提…
刚刚心血来潮,试一试QT和STL哪个好 网上评论都支持STL,我试了试:  贴上代码: #include <QCoreApplication> #include <QHash> #include <QDebug> #include <time.h> QHash<QString,int> val; void pmap(QString a) { qDebug() << a << ':' << val[a] <…
一.stackstack 模板类的定义在<stack>头文件中.stack 模板类需要两个模板参数,一个是元素类型,一个容器类型,但只有元素类型是必要的,在不指定容器类型时,默认的容器类型为deque.定义stack 对象的示例代码如下:stack<int> s1;stack<string> s2;stack 的基本操作有:入栈,如例:s.push(x);出栈,如例:s.pop();注意,出栈操作只是删除栈顶元素,并不返回该元素.访问栈顶,如例:s.top()判断栈空,…
STL中的map和unordered_map map 头文件:#include 原理:std::map的内部实现了一颗红黑树,有对其键值进行排序的功能,所以map是一个有序的容器,map中的每一个元素都是红黑树的一个节点,插入.删除.查找等操作的复杂度都是logn的 //定义 map<int,int> mp //插入 1.mp.insert(pair<int, int>(x, y)); 2.mp[x]+=y; //删除 mp.erase(x); mp.erase(mp.begin(…
原链接:传送门 今天看到 boost::unordered_map,它与 stl::map的区别就是,stl::map是按照operator<比较判断元素是否相同,以及比较元素的大小,然后选择合适的位置插入到树中.所以,如果对map进行遍历(中序遍历)的话,输出的结果是有序的.顺序就是按照operator< 定义的大小排序.而boost::unordered_map是计算元素的Hash值,根据Hash值判断元素是否相同.所以,对unordered_map进行遍历,结果是无序的. 用法的区别就是…
STL之map与pair与unordered_map常用函数详解 一.map的概述 map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能力,由于这个特性,它完成有可能在我们处理一对一数据的时候,在编程上提供快速通道.这里说下map内部数据的组织,map内部自建一颗红黑树(一种非严格意义上的平衡二叉树),这颗树具有对数据自动排序的功能,所以在map内部所有的数据都是有序的,后边我们会见识到有序的好处. 下面…
I decide to write to my blogs in English. When I meet something hard to depict, I'll add some Chinese necessarily. The differences between these containers are : The keys of set and map are unique, but they could be multiple for multiset and multimap…
http://www.cplusplus.com/reference/unordered_map/unordered_map/…
不得不提一下,hash_map未加入在C++11标准中. 在VC中编译: #include <hash_map> using namespace stdext; hash_map<int ,int> myhash; 在GCC中编译: #include <ext/hash_map> using namespace __gnu_cxx; hash_map<int ,int> myhash; 既如此,还是用unordered_map吧! C++ 11标准中加入了u…
map的特性是,所有元素都会根据元素的键值自动被排序.map的所有元素都是pair,同时拥有键值(key)和实值(value).pair的第一元素被视为键值,第二元素被视为实值.map不允许两个元素拥有相同的键值multimap的特性以及用法与map完全相同,唯一的差别在于它允许键值重复.unordered_map与map的区别就在于不会根据key的大小进行排序. 1.插入数据的方法 #include <map> #include <string> #include <ios…
1.map和set map和set底层实现均是红黑树 map支持下标操作,set不支持下标操作. set的迭代器是const的,不允许修改元素的值:map允许修改value,但不允许修改key. set和map的key都是唯一的. #include"map" #include"set" int main() { map<int,int> um; um[]=; um[]=; set<int> us; us.insert(); us.insert…
1.1 特性 关联性:通过key去检索value,而不是通过绝对地址(和顺序容器不同) 无序性:使用hash表存储,内部无序 Map : 每个值对应一个键值 键唯一性:不存在两个元素的键一样 动态内存管理:使用内存管理模型来动态管理所需要的内存空间 2.1 迭代器 unordered_map的迭代器是一个指针,指向这个元素,通过迭代器来取得它的值. unordered_map<Key,T>::iterator it; (*it).first; // the key value (of type…
写在最前面,本文摘录于柳神笔记: unordered_map 在头⽂件 #include <unordered_map> 中, unordered_set 在头⽂件 #include <unordered_set> 中- unordered_map 和 map (或者 unordered_set 和 set )的区别是, map 会按照键值对的键 key 进⾏ 排序( set ⾥⾯会按照集合中的元素⼤⼩进⾏排序,从⼩到⼤顺序),⽽ unordered_map (或 者 unorde…
本文采用在随机读取和插入的情况下测试map和unordered_map的效率 笔者的电脑是台渣机,现给出配置信息 处理器 : Intel Pentium(R) CPU G850 @ 2.90GHz × 2 内存 : 7.7GiB 操作系统 : Ubuntu 20.04.2 LTS 64位(Noi Linux 2.0) 由于在数据量小的情况下二者时间差异微乎其微,测试范围从1e4开始到1e7,map unordered_map存储为 int, int二元组,int三元组 单 int测试 插入范围…
综述   STL = Standard Template Library,标准模板库,惠普实验室开发的一系列软件的统称.它是由Alexander Stepanov.Meng Lee和David R Musser在惠普实验室工作时所开发出来的.从根本上说,STL是一些“容器”的集合,这些“容器”有list,vector,set,map等,STL也是算法和其他一些组件的集合.   在C++标准中,STL被组织为下面的17个头文件:<algorithm>.<deque>.<func…
转自:http://blog.csdn.net/truexf/article/details/17303263 一.vector vector采用一段连续的内存来存储其元素,向vector添加元素的时候,如果容量不足,vector便会重新malloc一段更大的内存,然后把原内存中的数据memcpy到新的内存中,并free原内存块,然后将新元素加入.vector的元素插入性能跟以下几个要素关系重大: 1. 插入的位置 头部插入:将所有元素后移,然后将新元素插入 中间插入:将插入点后面的元素后移,然…
使用C++的unordered_map类型时,我们经常要根据关键字查找,并移除一组映射,在Java中直接用remove即可,而STL中居然没有实现remove这个函数,还要自己写循环来查找要删除项,然后用erase来清除,我也是醉了,参见下面代码: vector<A*> v1; // remove A *a1 for (vector<A*>::iterator it = v1.begin(); it != v1.end(); ++it) { if (*it == a1) v1.er…
高效的使用STL 仅仅是个选择的问题,都是STL,可能写出来的效率相差几倍: 熟悉以下条款,高效的使用STL: 当对象很大时,建立指针的容器而不是对象的容器 1)STL基于拷贝的方式的来工作,任何需要放入STL中的元素,都会被复制: 这也好理解,STL工作的容器是在堆内开辟的一块新空间,而我们自己的变量一般存放在函数栈或另一块堆空间中:为了能够完全控制STL自己的元素,为了能在自己的地盘随心干活:这就涉及到复制: 而如果复制的对象很大,由复制带来的性能代价也不小 : 对于大对象的操作,使用指针来…