尝试在Visual Studio 2010下使用pair作为hash_map的键值。
无法编译。
int _tmain(int argc, _TCHAR* argv[])
{
hash_map <pair<int, int>, int> months;
months[pair<int, int>(2,3)] = 1;
int d;
cin >> d;
return 0;
}
收到错误消息:
错误1错误C2440:'type cast':无法转换为'const std :: pair&lt; _Ty1,_Ty2&gt;'到'size_t'c:\ program files \ microsoft visual studio 10.0 \ vc \ include \ xhash 34 1 testApplication1
我知道可能由于hash_map
而未提供pair
的专业化。有什么简单的方法来解决它吗?
答案 0 :(得分:4)
答案 1 :(得分:3)
这是一个pair<int,int>
哈希算子的一个非常简单的例子,它应该给你足够的开始实现你自己的:
using namespace std;
class pair_hasher
{
public:
size_t operator()(const pair<int, int> & p) const
{
return p.first*100 + p.second*10000;
}
};
typedef unordered_map <pair<int, int>, int, pair_hasher> pair_map;
int _tmain(int argc, _TCHAR* argv[])
{
pair_map months;
pair<int, int> p = make_pair<int, int>(2,3);
months[p] = 1;
cout << months[p] << endl;
return 0;
}