c++ - 用于排序/检索字符串的数据结构

标签 c++ data-structures

我有多个字符串数组,我使用比较函数将它们排序到优先队列中。我忽略了我需要遍历字符串的事实..

您会推荐什么其他数据结构?也许允许比较函数的东西,以便我得到一组排序的字符串

我可以有效地从优先队列中弹出元素,但这意味着在将它们推回优先队列之前我需要辅助空间

如果 vector 允许比较函数,那将是理想的。 STL“集合”会起作用吗?我有固定数量的元素(大约 450 个)。

编辑:确认 STL 的集合正在工作..即使没有定义我自己的字符串比较函数。

最佳答案

我不太确定你需要什么。我假设“我需要遍历字符串”意味着你需要以未排序的顺序遍历剩余的(不是“弹出”)字符串,此外还需要使用优先级队列(通过“弹出”)访问它们.如果您需要迭代排序序列,您应该预先对输入字符串进行排序(例如通过 std::set)而不是使用优先级队列(优先级队列不一定完全排序所有的项目,它排序序列“按需”)。

std::priority_queue 使用底层容器(默认为 std::vector)。通过继承此类,您可以访问容器。 protected member variable is defined in the standard ,这在理论上应该是安全的(尽管不要打赌它在现实生活中)。然而,inheriting STL containers is frowned upon .

另一种方法是创建您自己的优先级队列,例如基于 std::vectorstd::make_heap , std::pop_heapstd::push_heap . std::priority_queue 在内部使用这些函数。

关于c++ - 用于排序/检索字符串的数据结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6558240/

相关文章:

c++ - 线程不会在 Linux 上终止,但会在 Mac 上终止

C++11 typelist unroller 和静态函数的代理调用者

c++ - Boost编译器错误?

c++ - MFC序列化

具有推送/弹出且没有重复项的 Java 数据结构?

algorithm - 是否存在不是平衡二叉搜索树的平衡二叉树?时间复杂度是多少?

python - Python 中的多元组到两对元组?

c++ - openCV:如何提高图像处理性能?

java - Java中特殊链表方法的实现

java - 在文件中存储元素的列表