2013-06-20 69 views
2

您好我不知道我是否可以設置另一個鏈接的結構自己實際上在unordered_map中的鍵之間設置我自己的順序?或者有一個標準庫?我需要unordered_map的快速查找功能...在unordered_map上構造的混合鏈表?

例如:

#include<string> 
#include<tr1/unordered_map> 

struct linker 
{ 
    string *pt; 
    string *child1; 
    string *child2; 
}; 

unordered_map<string,int> map({{"aaa",1},{"bbb",2},{"ccc",3},{"ddd",4}}); 

linker node1 = new linker; 
node1.pt = &map.find("aaa")->first; 
node1.child1 = &map.find("ccc")->first; 
node1.child2 = &map.find("ddd")->first; 
+0

存儲迭代器而不是指針可能會更好。 – imreal

+0

@Nick,但如果大小改變並重新設置,迭代器將會改變。不是嗎? – weeo

+0

有很多事情使迭代器和指針無效,你必須小心不管哪種方式。 – imreal

回答

0

一種方式來優化哈希查找,找到產生上的按鍵,你哈希衝突的數量最少的哈希函數將要使用。

使用std::unordered_map您還可以get local iterators to buckets並重新排列存儲桶中的元素,如果您非常喜歡。

0

一個更好的解決方案恕我直言,將是如下:

struct comparator { 
    bool operator()(string const& lhs, string const& rhs) { 
     return ...;//Your definition of order here!!! 
     } 
}; 

std::map<string, int, comparator> map{{"aaa",1},{"bbb",2},{"ccc",3},{"ddd",4}};//note the elided paranthesis 

現在,你可以簡單地使用迭代器對這個地圖,這將是在一個特定的順序的()開始/結束()見對此的接受答案question