GUID Comparer ошибка! - PullRequest
       14

GUID Comparer ошибка!

2 голосов
/ 15 июля 2011

У меня написана следующая простая функция - неупорядоченная карта, которая принимает 2 GUIDS в качестве ключа и значения. Однако я не думаю, что у них определен 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;
 }

Это ошибка, которая показывает вверх: "> c: \ program files (x86) \ microsoft visual studio 10.0 \ vc \ include \ xhash (154): ошибка C2064: термин не оценивает функцию, принимающую 1 аргумент 1> class не определяет 'operator ()' или определенный пользователем оператор преобразования в указатель на функцию или ссылку на функцию, которая принимает соответствующее количество аргументов "

Я остро нуждаюсь в решении. Буду признателен за ваш вклад. Спасибо!

1 Ответ

1 голос
/ 15 июля 2011

Третий параметр шаблона 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, который звучит как функция сравнения, в качестве третьего параметра шаблона.

...