マップ、BSTは、辞書の出力を並べ替える必要がある場合に適しています。
また、追加、削除、ルックアップの操作を混同する必要がある場合に適しています。これはここでのあなたの必要性ではないと思います。辞書を読み込んで並べ替えてから、検索するだけですよね?この場合、ソートされた配列がおそらくより良いコンテナです。( ScottMeyerのEffectiveSTLの項目23を参照してください)。
(更新:配列はメモリ内でデータを連続して取得し、マップ内の各ノードにはマップ内の他のノードへの2つのポインターが含まれているため、マップはソートされた配列よりも多くのメモリキャッシュミスを生成する可能性があることを単純に考慮してください。シンプルでメモリ内のスペースをあまりとらないので、ソートされたベクトルの方がおそらく良いオプションです。マイヤーの本からその項目を読むことを強くお勧めします)
あなたが話しているソートの種類については、stlからのそのアルゴリズムが必要になります:
stable_sort。アイデアは、辞書を並べ替えてから、頻度キーでstable_sort()を使用して並べ替えることです。
それはそのようなものを与えるでしょう(実際にはテストされていませんが、あなたはアイデアを得ました):
struct Node
{
char * word;
int key;
};
bool operator < (const Node& l, const Node& r)
{
return std::string(l.word) < std::string(r.word));
}
bool freq_comp(const Node& l, const Node& r)
{
return l.key < r.key;
}
std::vector<node> my_vector;
... // loading elements
sort(vector.begin(), vector.end());
stable_sort(vector.begin(), vector.end(), freq_comp);