在hashmap中使用struct作为键。如何插入值?

时间:2010-03-02 01:40:29

标签: stl hashmap

代码在编译行失败

    map_free_segments [ loc ] = color;

错误的第一行是:
错误C2784:'bool std :: operator<(const std :: vector< _Ty,_Alloc>&,const std :: vector< _Ty,_Alloc>&)':无法推断'const std的模板参数: :矢量< _Ty,_Alloc> &安培;”来自'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 :(得分:0)

要使用复杂的struct / class作为hash_map中的键,您需要提供一个实现,告诉容器如何比较两个键。

你的struct需要实现&lt;操作员这样做。

您可能还需要定义一个hash_comp函数,以根据结构的值来计算哈希值。

查看hash_compare类的帮助以获取更多信息。