2010-01-18 70 views
0

我有一個Boost unordered_map是否僅用於將項目與整數相關聯?

HashMap<Node, Double> 
在Java中

,我會用以後檢索與節點相關聯的兩倍。我試着做

boost::unordered_map<Node*, double> 

但我得到一個「錯誤C2108:標不是整體式的」當我試圖把東西在裏面,比如:

map[some_node] = some_double; 

如果我解釋錯誤的權利,那麼我必須用int替換我的double。有沒有簡單的方法呢?

沒關係,這裏的功能,那麼:

void myClass::someFunction(const double* r) 
{ 
    //map is boost::unordered_map<Node*, double> 
    //nodes is a pointer to std::vector<Node*> 
    std::vector<Node*>::iterator it; 
    for(it = nodes->begin(); it != nodes->end(); it++) 
    { 
     //calculate the index 
     map[*it] = r[index]; //error 
    } 
} 

回答

1

與Java不同,C++不提供類的哈希函數。如果hashmap key的類型是一個整數或指針,那麼C++可以使用這樣一個事實,即一個整數是它自己的散列,但它不能用於你自己定義的類型 - 在這種情況下,你必須提供一個散列功能明確。這可能很難有效地執行,這是哈希被排除在原始C++標準之外的原因之一,它支持使用樹結構而不是哈希表的映射,並且只需要定義運算符<(),這通常是比高效的散列函數更容易編寫。

我還會觀察到,如果您使用指向節點的指針作爲散列鍵,則可以更輕鬆快捷地將double值存儲在節點本身中,而不是使用散列表,因爲您已經有效地有你想要交的節點。

+0

雖然這不是我正在尋找的,但你是對的。最好將double添加到Node中。 – zxcvbnm 2010-01-18 17:31:53

0

這不是抱怨雙,它在抱怨「some_node」。

什麼是您的地圖具體定義?

0

你不給some_node的聲明,但如果some_node不是指針,你會得到這個錯誤。雙重應該沒問題。

所以,你可能需要的東西是這樣的:

Node some_node; 
... 
map[&some_node] = some_double; 
1

的錯誤是不是地圖的訪問,但對於r[index]index必須是整數類型。

+0

噢,不能相信我沒有注意到。我宣佈索引爲雙。謝謝! – zxcvbnm 2010-01-18 17:05:26

相關問題