STL1-unordered_map
最近几天我要整理一下遇到的STL的函数,本来其实我是没有打算学的,认为用C就完全可以实现,干嘛要记那么多复杂的函数呢,所以我之前的做法都是将常用的C函数自己做了一个lib库,使用起来也是蛮方便的呢,但是最近在做leetcode的题时,发现如果使用自己的函数来实现,不只是代码量迅速的上升,而且当遇到指针内存分配的时候,问题也就更复杂了,当看到人家调用几行的STL函数就把功能实现而且代码的可读性也非常的好。这就促使我要探一探STL的函数库。几天就先谈一谈STL::unordered_map吧,同时也学一下C++标准库的map和我最爱的C语言的hash。我自己认为这是很重要的几个数据结构,不管使用哪种语言。
1、hash
对于散列表的基础知识,许多博客都进行了非常详细的讲解,参考http://kb.cnblogs.com/page/189480/.
散列表需要两个条件:1)将输入转化为整数的一个散列函数 2)使用一个处理冲突的方法。
2、map
map是C++标准库函数,其实现方式是红黑树,其储存的key值都是有序的。
#include <map> 声明: map<string,int> words; 插入:words["vermeer"] = 1;
对字数统计:
while(cin>>tword)
words[tword]++;
map对象有两个数据成员,一个是first,另一个是second.
其成员函数主要包括:find(string str);如果str在里面则返回一个iterator 指向key/value形成的一个pair
count(string str):返回str在map内出现的个数,一般的map只能出现一次,如果需要储存多份相同的key值,就必须使用multimap,此处不做介绍。
其具体内容请参见:https://msdn.microsoft.com/zh-cn/library/kf18ek11.aspx
3、unordered_map
unordered_map不是C++的标准库函数,因此在跨平台操作时可能会出现不兼容的情况,因此请谨慎使用。
与map不同的是,unordered_map在内部不做任何的排序,其存储位置取决于哈希值允许直接通过其键值为快速访问单个元素(具有恒定平均的平均时间复杂度)
常用的成员函数:end()、find()、count()、insert()等。
其具体内容请参见:https://msdn.microsoft.com/zh-cn/library/bb982522.aspx
STL1-unordered_map的更多相关文章
- STL: unordered_map 自定义键值使用
使用Windows下 RECT 类型做unordered_map 键值 1. Hash 函数 计算自定义类型的hash值. struct hash_RECT { size_t operator()(c ...
- C++11 新特性: unordered_map 与 map 的对比
unordered_map和map类似,都是存储的key-value的值,可以通过key快速索引到value.不同的是unordered_map不会根据key的大小进行排序, 存储时是根据key的ha ...
- C++ - unordered_map 源码解析
转自:http://zrj.me/archives/1248,转载请注明.(分析得不错) 主要尝试回答下面几个问题: 一般情况下,使用 hash 结构,需要有桶的概念,那么 unordered_map ...
- map 与 unordered_map
两者效率对比: #include <iostream> #include <string> #include <map> #include <unordere ...
- c++ 标准库的各种容器(vector,deque,map,set,unordered_map,unordered_set,list)的性能考虑
转自:http://blog.csdn.net/truexf/article/details/17303263 一.vector vector采用一段连续的内存来存储其元素,向vector添加元素的时 ...
- C++ unordered_map remove 实现哈希表移除
使用C++的unordered_map类型时,我们经常要根据关键字查找,并移除一组映射,在Java中直接用remove即可,而STL中居然没有实现remove这个函数,还要自己写循环来查找要删除项,然 ...
- map,hash_map和unordered_map 实现比较
map介绍 Map是STL[1]的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能力,由于这个特性,它完成有可能在我们处 ...
- hash_map vs unordered_map vs map vs unordered_set
hash_map vs unordered_map 这两个的内部结构都是采用哈希表来实现.unordered_map在C++11的时候被引入标准库了,而hash_map没有,所以建议还是使用unord ...
- C++11中新特性之:unordered_map
unordered_map和map类似,都是存储的key-value的值,可以通过key快速索引到value. 不同的是unordered_map不会根据key的大小进行排序,存储时是根据key的ha ...
- STL set multiset map multimap unordered_set unordered_map example
I decide to write to my blogs in English. When I meet something hard to depict, I'll add some Chines ...
随机推荐
- 开发ProxyServer的时候如何在一台PC上调试
为了测试在真实的网络环境下你的ProxyServer性能如何,而你手头又只有一台电脑,怎么办? 打开你的ProxyServer(我用java写的,因此ProxyServer的进程是javaw.exe) ...
- 怎样做出优秀的扁平化设计风格 PPT 或 Keynote 幻灯片演示文稿?(装)
不知道你有没有想过,为什么很人多的扁平化 PPT 是这个样子: 或者是这样: 然而,还有一小撮人的扁平化 PPT 却拥有那么高颜值: 为什么会产生这么大的差距呢?丑逼 PPT 应该如何逆袭成为帅逼呢? ...
- 20_采用ContentProvider对外共享数据
<AndroidManifest.xml> <application <provider android:name=".PersonProvider&q ...
- php数据库操作常用相关函数
MySQL访问函数都需要有相应的权限才能运行.常用的相关函数介绍如下: (1)integer mysql_connect(主机,用户名,口令); 此函数开始一个对指定主机上的MySQL数据库的连接.若 ...
- 给 Gradle 配置国内的 Maven 仓库,提高 jar 包下载速度。
最近使用 gradle 跑一些 spring 的示例,在下载一些 jar 的时候速度特别慢,因为是访问的国外的 maven 仓库. 开源中国提供了国内的 maven 库,所以可以在 gradle 里设 ...
- 11.cadence.通孔类封装创建[原创]
1.打开Pad Designer ---- ----- ---- ---- OK ------- ---- 回到Pad Designer internal:不管是几层板,中间层用这个就可以了: --- ...
- [Android教程]EditText设置/隐藏光标位置、选中文本和获取/清除焦点
有时候需要让光标显示在EditText的指定位置或者选中某些文本.同样,为了方便用户输入以提升用户体验,可能需要使EditText获得或失去焦点. 1. 设置光标到指定位置 EditText et ...
- java.io.InvalidClassException: com.master.CurrentMessages; local class incompatible:
报错信息如下: java.io.InvalidClassException: com.master.CurrentMessages; local class incompatible: stream ...
- JQuery_给元素添加或删除类等以及CSS()方法
一.addClass() - 向被选元素添加一个或多个类 <script src="jquery-1.11.1.min.js"></script> < ...
- 单点登录系统构建之一——基础知识(Kerberous/SAML)
http://web.mit.edu/kerberos/ Kerberos Kerberous是一个网络身份验证协议,它被设计为客户端/服务器提供基于密钥的强加密机制.该协议最初由MIT实现并被广泛商 ...