简体   繁体   中英

Using pair as key for hash_map under Visual Studio

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM