2011-07-14 6 views
2

私は以下の単純な関数を書いています - 2つのGUIDをキーと値として取る順序のないマップです。しかし、私は彼らがGUIDのcomparerを定義しているとは思えないので、私が試したすべてのGUIDのcomparersでこのエラーがスローされます。GUIDコンプリータエラー!

#include <unordered_map> 
#include<iostream> 
#include<stdio.h> 
#include<Objbase.h> 
typedef unordered_map<GUID, GUID, less_guid> Mymap; 
Mymap c1; 

int __cdecl wmain(int /*argc*/, __in_ecount(argc) WCHAR * /*argv[ ]*/) 
{ 
    GUID TargetC; 
    GUID TargetA; 
    CoCreateGuid(&TargetC); CoCreateGuid(&TargetA); 
    c1.insert(Mymap::value_type(TargetC,TargetA));/
    getch(); 
    return 0; 
} 

これは、アップを示したエラーです: 「> C:エラーC2064:マイクロソフトのVisual Studio 10.0 \ VCの\ \ \プログラムファイル(x86の)は\ xhash(154)を含み用語は評価されません1つの引数を取る関数 1>クラスは、適切な数の引数をとる関数へのポインタまたは関数への参照への 'operator()'またはユーザー定義の変換演算子を定義しません。 "

I '解決策が必要です。あなたのご意見に感謝します。ありがとう!

template<class Key, 
     class T, 
     class Hash = hash<Key>, 
     class Pred = std::equal_to<Key>, 
     class Alloc = std::allocator<std::pair<const Key, T> > > 
class unordered_map; 

あなたはless_guidを渡している、第三テンプレートパラメータとして、比較関数のように聞こえる:

答えて

1

std::unordered_mapの第三テンプレートパラメータは、ハッシュ関数である、第四テンプレートパラメータには、比較関数です。