Как использовать struct в качестве ключа в std:: map

Я хочу использовать std::map ключ, и значение элементов структуры.

я получаю следующую ошибку: error C2784: 'bool std::operator <(const std::basic_string<_Elem,_Traits,_Alloc> &,const _Elem *)' : could not deduce template argument for 'const std::basic_string<_Elem,_Traits,_Alloc> &' from 'const GUID

Я понимаю, что я должен перегрузить operator < для этого случая, но дело в том, что у меня нет доступа к коду структуры, которую я хочу использовать (GUID структура в VC++).

вот фрагмент кода:

//.h

#include <map>
using namespace std;

map<GUID,GUID> mapGUID;


//.cpp

GUID tempObj1, tempObj2;              
mapGUID.insert( pair<GUID,GUID>(tempObj1, tempObj2) );   

как решить эту проблему?

4 ответов


вы можете определить оператор сравнения как автономная функция:

bool operator<(const GUID & Left, const GUID & Right)
{
    // comparison logic goes here
}

или, поскольку в целом оператор std::map шаблон:

struct GUIDComparer
{
    bool operator()(const GUID & Left, const GUID & Right) const
    {
        // comparison logic goes here
    }
};

// ...

std::map<GUID, GUID, GUIDComparer> mapGUID;

любой тип, который вы используете в качестве ключа, должен обеспечивать строгий слабый порядок. Вы можете указать тип компаратора в качестве третьего аргумента шаблона или перегрузить operator< для вашего типа.


нет оператора


может использовать класс, унаследованный от GUID, в котором вы реализуете operator