Использование пары в качестве ключа для hash_map в визуальной студии

Попробуйте использовать пару в качестве значения ключа для hash_map в Visual Studio 2010.

Не удалось его скомпилировать.

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: «приведение типа»: невозможно преобразовать из «const std :: pair»<_Ty1, _Ty2> ‘to’ size_t ‘c: \ program files \ microsoft visual studio 10.0 \ vc \ include \ xhash 34 1 testApplication1

Я знаю это, вероятно, из-за hash_map не предоставляет специализацию для pair, Есть ли простой способ это исправить? Спасибо

5

Решение

Вы должны написать свой собственный hash_compare — функция для объекта, который вы используете в качестве ключа!

В вашем случае это std::pair<int,int>

посмотри на этот пост — может быть, у вас получится лучше реализовать свой собственный компаратор!

4

Другие решения

Вот очень простой пример 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;
}
3

По вопросам рекламы [email protected]