Использование структуры в качестве ключа в hashmap. Как вставить значения? - PullRequest
0 голосов
/ 02 марта 2010

Ошибка кода в строке компиляции

    map_free_segments [ loc ] = color;

Первая строка ошибок:
ошибка C2784: 'bool std :: operator <(const std :: vector <_Ty, _Alloc> &, const std :: vector <_Ty, _Alloc> &)': не удалось получить аргумент шаблона для 'const std :: vector < _Ty, _Alloc> & 'from' const localization '

Полный источник:


#include <windows.h>

#include <hash_map>
using namespace std;
using namespace stdext;

#pragma pack(1)
struct localization
{
    char X;
    char Y;
    char Z;
    char L;
};
#pragma pack(1)

typedef hash_map<localization,unsigned long> type_map_free_segments;

//typedef pair<localization, unsigned long> pair_loc;


int main(int argc, CHAR* argv[])
{
    unsigned long color = 1234;
    type_map_free_segments map_free_segments;

    localization loc;

    loc.X = 1;
    loc.Y = 2;
    loc.Z = 3;
    loc.L = 5;

    map_free_segments [ loc ] = color;
    //map_free_segments.insert( pair_loc(loc, color ));

    return 0;
}


1 Ответ

0 голосов
/ 02 марта 2010

Чтобы использовать сложную структуру / класс в качестве ключа в hash_map, вам необходимо предоставить реализацию, которая сообщает контейнеру, как сравнивать два ключа.

Ваша структура должна реализовать оператор <, чтобы сделать это. </p>

Вам также может понадобиться определить функцию hash_comp для вычисления хешей на основе значений вашей структуры.

Для получения дополнительной информации посмотрите справку по классу hash_compare.

...