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

问题描述 投票:5回答:2

尝试在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 <_Ty1,_Ty2>'转换为'size_t'c:\ program files \ microsoft visual studio 10.0 \ vc \ include \ xhash 34 1 testApplication1

我知道这可能是由于hash_map没有为pair提供专业化。有什么简单的方法来解决它吗?

c++ hashmap std-pair
2个回答
4
投票

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

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

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


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;
}
© www.soinside.com 2019 - 2024. All rights reserved.