如果您需要为您的字典排序输出,则 Map、BST 很好。
如果您需要混合添加、删除和查找操作,这很好。我不认为这是你在这里的需要。您加载字典,对其进行排序,然后只在其中查找,对吗?在这种情况下,排序数组可能是更好的容器。(参见Scott Meyer的Effective STL中的第 23 项)。
(更新:只需考虑一个映射可能比排序数组产生更多的内存缓存未命中,因为数组在内存中获取其数据连续,并且映射中的每个节点都包含指向映射中其他节点的 2 个指针。当您的对象是简单并且在内存中占用的空间不多,排序向量可能是更好的选择。我强烈建议您阅读 Meyer 书中的那个项目)
关于您正在谈论的那种排序,您将需要来自 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);