Попробуйте использовать пару в качестве значения ключа для 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
, Есть ли простой способ это исправить? Спасибо
Вы должны написать свой собственный hash_compare
— функция для объекта, который вы используете в качестве ключа!
В вашем случае это std::pair<int,int>
посмотри на этот пост — может быть, у вас получится лучше реализовать свой собственный компаратор!
Вот очень простой пример 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;
}