2

こんにちは、別のリンクされた構造体を自分で設定して、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;
4

2 に答える 2

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() を使用できます。これは、この質問に対する受け入れられた回答を参照してください。

于 2013-06-20T21:27:23.757 に答える
0

ハッシュ ルックアップを最適化する 1 つの方法は、使用するキーで最小数のハッシュ衝突を生成するハッシュ関数を見つけることです。

ローカル イテレータをバケットに取得し、バケット内の要素を再配置するstd::unordered_mapこともできます。

于 2013-06-20T21:14:51.827 に答える