2013-03-04 141 views
0

是否有一個使用boost lib實現哈希表的簡單例子。我讀的文檔使用boost庫的簡單哈希表

boost::hash<int,std::string> input; 

我需要知道,如果我可以使用哈希表如下所示:

input.add<key,instance_of_input_class> //pseudo code 

其中輸入類是:

class Input 
{ 
    int id; 
    std::String name; 
} 
+0

我閱讀文檔,但我不能得到任何幫助如何將輸入類添加到哈希表。 – 2013-03-04 13:32:58

+0

'boost'或'std :: unordered_map'模板是一個關聯容器(即它將一個鍵與一個值相關聯)。它是使用哈希表來實現的。你不會顯示你的'Input'類是什麼或者你想如何使用它,所以很難給出比現有答案更詳細的例子。 – Useless 2013-03-04 13:43:50

回答

3

boost::hash不是散列表,它只是計算散列值。請參閱Boost documentation瞭解如何將其與無序容器相結合,並閱讀有關如何插入值的容器的documentation

由於您使用的是typedef,因此您的評論聲明瞭類型map,而不是該類型的實例。

您的文章也暗示,也許你甚至不希望/需要boost::hash,嘗試

std::unordered_map< int, std::string > my_map; 

當然,你也可以使用boost::unordered_map代替std::unordered_map的情況下,後者不只是工作,或者你不要想要使用它。

現在的方法添加到您的類,允許訪問值:

class Input 
{ 
    int id; 
    std::string name; // note: lowercase string, not String 

public: 
    std::pair< int, std::string > values() const 
    { 
    return std::make_pair(id, name); 
    } 
}; 

,並使用它插入的Input實例到地圖:

Input my_input; 
my_map.insert(my_input.values()); 
+0

...這是我從文檔中讀取的typedef boost :: unordered_map map;在這是映射散列表的實例? – 2013-03-04 13:26:01

+0

呵呵,萬一這是你想知道的事情:是的,'unordered_map'建立了一個哈希表的模型。 – 2013-03-04 13:44:33

+0

現在這是一個有幫助的答案..謝謝@Daniel Frey – 2013-03-04 13:50:50