5

文字列のハミング距離を対応する文字列にマップするために、このマルチマップを作成しました。

2 つの文字列のハミング距離が同じになる可能性があるため、昇順に並べ替えます。ただし、印刷するとソートされません。hamdistArray は unsigned 型として宣言されています。

typedef multimap<unsigned, string, less<unsigned> > Check;
            Check pairs; 

            pairs.insert(Check::value_type(hamdistArray[j], d.sortedWordDatabase[j]));

            for(Check::const_iterator iter = pairs.begin(); iter != pairs.end(); ++iter)
            {
                cout << iter->first << '\t' << iter->second<< endl;
            }
4

4 に答える 4

5

マルチマップ内の要素は、キー(この場合は符号なしハミング距離)で並べ替えられます。同じキーを持つ要素は、値(この場合は文字列)で並べ替えられません。通常、挿入された順序で保持されます。

于 2011-03-02T13:48:56.340 に答える
0

multimap値(文字列)ではなく、キー(長さ)のみでソートします。この場合、あなたの最善のアプローチはstd::map<unsigned, std::set<std::string> >. a を使用することもできますが、検索するにはダミーの s をstd::set<std::pair<unsigned, std::string> >作成して検索する必要があります。pair

于 2011-03-02T14:26:38.273 に答える
0

less テンプレート関数はデフォルトであるため、必要ありません。as なしで Check を宣言してみてください。

typedef multimap<unsigned, string> Check;

編集: これを行う最善の方法は、ハッシュ キーを *key_type* として生成することですstd::pair<unsigned, string>

于 2011-03-02T13:43:46.760 に答える
0

std::multimapキーが比較されるとき、それらが表す値がわからないため、これは を使用して行うことはできません。

于 2011-03-02T13:49:36.877 に答える