在unordered_map上构建的混合链表?

时间:2013-06-20 21:02:27

标签: c++ linked-list 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;

2 个答案:

答案 0 :(得分:0)

优化哈希查找的一种方法是找到一个哈希函数,该函数会在您要使用的键上产生最少数量的哈希冲突。

如果您愿意,可以使用std::unordered_map get local iterators to buckets并重新排列广告素材中的元素。

答案 1 :(得分: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

现在你可以简单地使用这个地图的迭代器对begin()/ end(),它将按照指定的顺序看到这个question的接受答案