5

尝试在 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. 有什么简单的方法可以解决吗?

4

2 回答 2

4

hash_compare您必须为您用作键的对象编写自己的- 函数!

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

看看这篇文章 - 也许你会更好地实现自己的比较器!

于 2013-02-14T16:07:32.683 回答
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;
}
于 2013-02-14T16:15:00.630 回答