Try to use pair as key value for hash_map under Visual Studio 2010.
Could not compile it.
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;
}
got error message:
Error 1 error C2440: 'type cast' : cannot convert from 'const std::pair<_Ty1,_Ty2>' to 'size_t' c:\\program files\\microsoft visual studio 10.0\\vc\\include\\xhash 34 1 testApplication1
I know it probably due to hash_map
doesn't provide a specialization for pair
. Any easy way to fix it?
You have to write your own hash_compare
- function for the object you're using as key!
In your case is it std::pair<int,int>
look at this post - maybe you get a better idea implementing your own comparator!
Here's a very simple example of a pair<int,int>
hash functor, it should give you enough of a start to implement your own:
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;
}
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.