Как использовать 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<
для вашего типа.