2010-03-02 70 views
0

代碼失敗在編譯行使用struct作爲hashmap中的鍵。如何插入值?

 
    map_free_segments [ loc ] = color; 

爲錯誤的第一行是:
錯誤C2784:「布爾的std ::操作者<(常量的std ::矢量< _Ty,_Alloc> &,常量性病::矢量< _Ty,_Alloc> &)」:不能推斷爲模板參數 '常量性病::矢量< _Ty,_Alloc> &' 從 'const的本地化'

的完整源:

 

#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; 
} 

 

回答

0

要使用複雜的struct/class作爲hash_map中的鍵,您需要提供一個實現,告訴容器如何比較兩個鍵。

你的結構需要實現<運算符來做到這一點。

您可能還需要定義一個hash_comp函數來根據結構的值計算散列值。

查看關於hash_compare類的幫助以獲取更多信息。