Map和hash_map
map和hash_map
今天在写拼流的程序时碰到一个问题,要根据流的四元组的结构信息映射到该流的数据。也就是我在网络数据包拼接的过程中,要根据包的地址和端口信息,对应到其对应的一个流的数据上去,把端口和地址信息相同的包的数据段中的数据组装起来。自然想到用map,不过map要求其关键码类型提供一个小于操作,而我的这种四元组信息没有大小的关系,于是自然就想到用hash_map。
hash_map的基本原理是使用一个下标范围比较大的数组来存储元素。需要提供一个散列函数(hash函数),使得每个关键字都与一个函数值(即数组下标,hash值)相对应,于是用这个数组单元来存储这个元素。除了定义一个hash函数外,还需提供一个比较其关键码是否相等的函数。对于STL的内部类型的关键码,hash函数和equal_to函数可以省略,STL会提供缺省的函数。不过对于自定义结构的关键码,就必须自己提供hash函数和比较函数。
例如: //如果要自己定义字符串hash函数,你可以这样写:
对于比较函数,应该就比较简单了。 int main() cout<<hmap[a1]<<endl; 后来弄了半天,发现VC6下竟没有hash_map头文件,ft....。ms当年VC6出来的时候hash_map还没有成为STL标准吧。转而奔到.net2003下,还是编译不过,再ft....现在正下.net 2005中,希望能支持hash_map,不然就只能单独下一个STL库安装上了。 |
Map和hash_map的更多相关文章
- map,hash_map, hash_table, 红黑树 的原理和使用
在刷算法题的时候总是碰到好多题,号称可以用hash table来解题.然后就蒙圈了. 1.首先,map和hash_map的区别和使用: (1)map底层用红黑树实现,hash_map底层用hash_t ...
- STL中map与hash_map容器的选择收藏
这篇文章来自我今天碰到的一个问题,一个朋友问我使用map和hash_map的效率问题,虽然我也了解一些,但是我不敢直接告诉朋友,因为我怕我说错了,通过我查询一些帖子,我这里做一个总结!内容分别来自al ...
- map与hash_map使用与对比
#include <iostream> #include <functional> #include <map> #include <ext/hash_map ...
- STL 中的map 与 hash_map的理解
可以参考侯捷编著的<STL源码剖析> STL 中的map 与 hash_map的理解 1.STL的map底层是用红黑树存储的,查找时间复杂度是log(n)级别: 2.STL的hash_ma ...
- STL中的map和hash_map
以下全部copy于:http://blog.chinaunix.net/uid-26548237-id-3800125.html 在网上看到有关STL中hash_map的文章,以及一些其他关于STL ...
- map、hash_map、unordered_map 的思考
#include <map> map<string,int> dict; map是基于红黑树实现的,可以快速查找一个元素是否存在,是关系型容器,能够表达两个数据之间的映射关系. ...
- map vs hash_map
1. map, multimap, set, multiset g++ 中 map, multimap, set, multiset 由红黑树实现 map: bits/stl_map.h multim ...
- map,hash_map和unordered_map 实现比较
map介绍 Map是STL[1]的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能力,由于这个特性,它完成有可能在我们处 ...
- STL中map与hash_map的比较
1. map : C++的STL中map是使用树来做查找算法; 时间复杂度:O(log2N) 2. hash_map : 使用hash表来排列配对,hash表是使用关键字来计算表位置; 时间复杂度:O ...
随机推荐
- Yahoo, Steve blog
Performance Research Domain Sharding revisited A Software Developer's Guide to HTTP How the Browser ...
- redis 数据库维护之 key 大小获取
获得 redis key 大小 redis 用过一段时间后,发现一个KEY每天需更新值,但总是更新不全,故此为了定位问题,整理此脚本,辅助监控一下 写了两个脚本 注意:需要提前从 https://gi ...
- Chapter 6面向对象
1.Python中预定义的函数在定义的时候有一种很特别的形式,即是函数名是小写,并且函数名前后分别有两个下划线.同样的,在对象中也有预定义的方法,例如所有对象的基类object中的__new__(), ...
- flashdevelop 开发技巧
FlashDevelop用来编写AS3代码,Flash CS5用来编辑程序所需要的资源(图片,声音-),Flash CS5自带有Flex SDK,在目录 C:\Program Files\Adobe\ ...
- HDU4836 The Query on the Tree(树状数组&&LCA)
由于智力的问题,百度之星完全lu不动..开场看第一题根据题目给的条件我觉得一定是可以构造出来的,题目给的意思颇有鸽巢原理的感觉,于是觉得开场第一题应该就是智力构造题了,想了半个小时,发现完全想不动,于 ...
- POJ 3978 Primes(素数筛选法)
题目 简单的计算A,B之间有多少个素数 只是测试数据有是负的 //AC //A和B之间有多少个素数 //数据可能有负的!!! #include<string.h> #include< ...
- ****RESTful API 设计最佳实践(APP后端API设计参考典范)
http://blog.jobbole.com/41233/ 背景 目前互联网上充斥着大量的关于RESTful API(为方便,下文中“RESTful API ”简写为“API”)如何设计的文章,然而 ...
- 机器学习之逻辑回归(Logistic Regression)
1. Classification 这篇文章我们来讨论分类问题(classification problems),也就是说你想预测的变量 y 是一个离散的值.我们会使用逻辑回归算法来解决分类问题. 之 ...
- HDU5568/BestCoder Round #63 (div.2) B.sequence2 dp+高精度
sequence2 Problem Description Given an integer array bi with a length of n, please tell me how many ...
- QTP 参数化
PS:方法内容是转的别人的,我们项目中只用到了方法三,主要用于将测试数据与业务分离,增强测试数据的可维护性. 方法一.DataTable方法 这是QTP提供的一种方法,也是最容易实现参数化的一种方式. ...