我编写了以下简单函数 - 一个无序映射,它将2个GUID作为键和值。但是,我认为他们没有定义GUID比较器,因此它会与我尝试过的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;
}
这是出现的错误: “&gt; c:\ program files(x86)\ microsoft visual studio 10.0 \ vc \ include \ xhash(154):错误C2064:term不计算为带有1个参数的函数 1 GT; class没有定义'operator()'或用户定义的转换操作符到指向函数的指针或函数引用,它接受适当数量的参数“
我迫切需要一个解决方案。我很感激你的意见。谢谢!
答案 0 :(得分:1)
std::unordered_map
的第三个模板参数是哈希函数,第四个模板参数是比较函数:
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
,这听起来像一个比较函数,作为第三个模板参数。