5

VisualStudio2010で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:'タイプキャスト':'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 に答える