在Visual Studio下使用pair作为hash_map的键

时间:2013-02-14 15:51:49

标签: c++ hashmap std-pair

尝试在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的专业化。有什么简单的方法来解决它吗?

2 个答案:

答案 0 :(得分:4)

您必须为您正在使用的对象编写自己的hash_compare - 函数!

在你的情况下是std::pair<int,int>

看看this帖子 - 也许你会更好地实现自己的比较器!

答案 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;
}