c++ hash_map用法总结
来源:互联网 发布:c语言贪吃蛇代码难不难 编辑:程序博客网 时间:2024/04/27 21:53
c++ STL库里有自定义的hash_map 方法,但是使用起来并不是那么方便
hash_map主要的方法有
find(),insert()
我结合官方API说明一下他们的用法
一、需要特别注意的地方,
1.头文件的引用
2.如何插入一个<key,value>键值对(参考一下代码)
3.find()的返回值
4.如何获取某一个key值相应的value值
hm1_RcIter -> second分别用。first,和,second,指代key和value的值
// hash_map_find.cpp// compile with: /EHsc#define _DEFINE_DEPRECATED_HASH_CLASSES 0#include <hash_map>#include <iostream>int main( ){ using namespace std; using namespace stdext; hash_map <int, int> hm1; hash_map <int, int> :: const_iterator hm1_AcIter, hm1_RcIter; typedef pair <int, int> Int_Pair; hm1.insert ( Int_Pair ( 1, 10 ) ); hm1.insert ( Int_Pair ( 2, 20 ) ); hm1.insert ( Int_Pair ( 3, 30 ) ); hm1_RcIter = hm1.find( 2 ); cout << "The element of hash_map hm1 with a key of 2 is: " << hm1_RcIter -> second << "." << endl; // If no match is found for the key, end( ) is returned hm1_RcIter = hm1.find( 4 ); if ( hm1_RcIter == hm1.end( ) ) cout << "The hash_map hm1 doesn't have an element " << "with a key of 4." << endl; else cout << "The element of hash_map hm1 with a key of 4 is: " << hm1_RcIter -> second << "." << endl; // The element at a specific location in the hash_map can be found // using a dereferenced iterator addressing the location hm1_AcIter = hm1.end( ); hm1_AcIter--; hm1_RcIter = hm1.find( hm1_AcIter -> first ); cout << "The element of hm1 with a key matching " << "that of the last element is: " << hm1_RcIter -> second << "." << endl;}
Output
The element of hash_map hm1 with a key of 2 is: 20.The hash_map hm1 doesn't have an element with a key of 4.The element of hm1 with a key matching that of the last element is: 30.
二、hash_map使用string和long long做key的问题
当hash_map中使用string为key时,需用户扩展命名空间,否则报错如下:
/usr/lib/gcc/x86_64-redhat-linux/3.4.5/../../../../include/c++/3.4.5/ext/hashtable.h:518: error: no match for call to `(const __gnu_cxx::hash<std::string>) (const std::basic_string<char, std::char_traits<char>, std::allocator<char> >&)'
表明编译器错误
解决方法:
#include <ext/hash_map>namespace __gnu_cxx
{
template<> struct hash< std::string >
{
size_t operator()( const std::string& x ) const
{
return hash< const char* >()( x.c_str() );
}
};
template<> struct hash<long long>
{
size_t operator()(long long x) const
{
return x;
}
};
}
0 0
- c++ hash_map用法总结
- hash_map用法
- hash_map总结
- hash_map总结
- hash_map总结
- hash_map 总结
- c++hash_map
- STL--hash_map用法(1)
- STL--hash_map用法(2)
- C++中hash_map用法
- C++中hash_map用法
- hash_map的用法续
- STL之hash_map总结
- 【C++】STL的hash_map
- c++hash_map详解
- VC的hash_map和GCC hash_map用法区别
- C++const用法总结
- C++const用法总结
- 在安卓中,怎么通过ViewPager来实现轮播图的效果?
- Android 中的 Service 全面总结
- 巴贝奇的困境 by: 天涯ID--先生会算命V1
- Hystrix使用
- 11-1元素分类
- c++ hash_map用法总结
- 简析TCP的三次握手与四次分手
- C++中函数指针的使用
- 专题四1001
- Roman to Integer
- JavaSE学习54:GUI编程之几个常用的类
- Android 编译时View注入工具的实现
- Qt编译出错
- ubuntu下mysql的数据导出及导入