代码之家  ›  专栏  ›  技术社区  ›  lsalamon

在哈希映射中将结构用作键。如何插入值?

  •  0
  • lsalamon  · 技术社区  · 15 年前

    代码在编译行失败

        map_free_segments [ loc ] = color;
    

    错误的第一行是:
    错误C2784:“bool std::operator<(const std::vector<_ty,_alloc>&,const std::vector<_ty,_alloc>&)”:无法从“const本地化”中推导“const std::vector<_alloc>&”的模板参数。

    完整来源:

    
    #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 回复  |  直到 15 年前
        1
  •  0
  •   Joe    15 年前

    要使用复杂的结构/类作为哈希图中的键,需要提供一个实现,告诉容器如何比较两个键。

    您的结构需要实现<运算符才能实现这一点。

    您可能还需要定义一个hash_comp函数来根据结构的值计算散列。

    有关详细信息,请参阅哈希比较类的帮助。