我想在項目中使用unordered_set
。Boost - unordered_set tutorial/examples/ANYTHING?
但是,它的文檔不完整或只是一個技術參考,沒有例子。
任何人都可以提供鏈接到在線資源來處理它嗎?書也歡迎,最好是免費的。谷歌搜索沒有任何價值。
謝謝!
我想在項目中使用unordered_set
。Boost - unordered_set tutorial/examples/ANYTHING?
但是,它的文檔不完整或只是一個技術參考,沒有例子。
任何人都可以提供鏈接到在線資源來處理它嗎?書也歡迎,最好是免費的。谷歌搜索沒有任何價值。
謝謝!
這裏幾乎沒有文檔,因爲它的行爲與std::set
完全相同,只是它需要哈希和等於函數而不是比較函數。只需查找std::set
的示例,並用std::unordered_set
替換它們即可,您應該沒問題。
如果您需要編寫哈希函數,則在文檔中有示例,即this one。
我會嘗試使用您在std::set
或其他容器上使用的相同訪問方法,http://www.boost.org/doc/libs/1_37_0/doc/html/unordered.html似乎同意。
boost文檔中提到,boost容器實際上是C++標準庫技術報告(稱爲TR1)首先指定的接口的實現。到目前爲止,它們似乎成爲新標準工作草案的一部分。如果您搜索tr1和unordered_set,Google會提供更多文檔/示例。我喜歡的MSDN參考,其中也有一些樣品:
碼最常見的用例:
#include <boost/unordered_set.hpp>
using boost::unordered_set;
using std::string;
using std::cout;
using std::endl;
int main (void)
{
// Initialize set
unordered_set<string> s;
s.insert("red");
s.insert("green");
s.insert("blue");
// Search for membership
if(s.find("red") != s.end())
cout << "found red" << endl;
if(s.find("purple") != s.end())
cout << "found purple" << endl;
if(s.find("blue") != s.end())
cout << "found blue" << endl;
return 0;
}
輸出
found red
found blue
更多信息
http://www.cplusplus.com/reference/unordered_set/unordered_set/find/
它可能有非常相似到std ::設置接口,但它的行爲是不同的。除了在該散列使得它更快,也有方法,使Boost的'unordered_set'可以慢,如方法:https://svn.boost.org/trac/boost/ticket/3693 – 2010-12-12 17:37:19
@約翰:這是性能特徵是不同的,它不能以有序的方式迭代(當然,它被稱爲'unordered_set')。否則,它的行爲與'std :: set'完全相同。 – 2010-12-12 17:38:37
擦除性能問題已被修復: 來自boost 1.61_0的引用: 備註: 在舊版本中,這可能效率不高,因爲它必須搜索多個存儲桶以查找返回的迭代器的位置。數據結構已經改變,所以不再是這種情況,並且已經廢棄了替代擦除方法。 – Sid 2016-05-19 21:35:17