stl-hash_map
来源:互联网 发布:淘宝卖家怎么激活 编辑:程序博客网 时间:2024/06/08 11:32
简介
①hash_map的特性是所有的元素并不会自动排序,因为其底层是用hash_table。hash_table并没有自动排序的功能,这一点与map有区别,hash_map的所有元素都是pair,即key-value。
pair定义:
template<class T1,class T2>struct pair{ typedef T1 first_type; typedef T2 second_type; T1 first; T2 second; pair():first(T1()),second(T2()){} pair(const T1& a,const T2& b):first(a),second(b){}}
②SGI STL hash_map底层机制是hash_table,每个节点的内容是pair。hash_table把数据的存储和查找消耗的时间大大降低,几乎可以看成是常数时间;而代价仅仅是消耗比较多的内存。然而在当前可利用内存越来越多的 情况下,用空间换时间的做法是值得的。其基本原理是:使用一个下标范围比较大的数组来存储元素。可以设计一个函数(哈希函数,也叫做散列函数),使得每个元素的关键字都与一个函数值(即数组下 标,hash值)相对应,于是用这个数组单元来存储这个元素;也可以简单的理解为,按照关键字为每一个元素“分类”,然后将这个元素存储在相应“类”所对 应的地方,称为桶。
但是,不能够保证每个元素的关键字与函数值是一一对应的,因此极有可能出现对于不同的元素,却计算出了相同的函数值,这样就产生了“冲突”,换句话说,就是把不同的元素分在了相同的“类”之中。 总的来说,“直接定址”与“解决冲突”是哈希表的两大特点。
示例
#include <hash_map>...struct eqstr{ bool operator()(const char* s1,const char* s2)const { return strcmp(s1,s2) == 0; }};hash_map<const char*,int,hash<const char*>,eqstr> temp;插入元素temp["zhangsan"] = 1;temp["lisi"] = 2;迭代器使用hash_map<const char*,int,hash<const char*>,eqstr>::iterator temp_iter = temp.begin();for(;temp_iter!=temp.end();temp_iter++) cout<<temp_iter->first<<' '<<temp_iter->second<<endl;获取值int num = temp["zhangsan"];
阅读全文
1 0
- STL hash_map
- STL---hash_map
- STL hash_map
- stl-hash_map
- 详细解说STL hash_map
- 详细解说STL hash_map
- STL:map与hash_map
- STL hash_map使用
- STL hash_map使用
- STL中的hash_map
- 详细解说STL hash_map
- STL--hash_map用法(1)
- STL--hash_map用法(2)
- STL hash_map使用
- stl hash_map原理
- C++ STL中哈希表 hash_map
- STL hash_map使用
- stl hash_map详解
- xxx is not in the sudoers file.This incident will be reported.的解决方法
- Notepad++ pythonScript插件开发
- struct 和class
- InfluxDB数据备份与恢复
- Hdu-5902-GCD is Funny (gcd)
- stl-hash_map
- ARM 内存对齐总结
- InfluxDB数据库读写
- RRD数据库读写
- HDU 4101Ali and Baba (bfs)
- 7-14 总结
- Json字符串与java对象互转(Java版本)
- 一个屌丝程序猿的人生(七十)
- 【LectCode】230. Kth Smallest Element in a BST