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

时间:2011-07-02 16:30:50

标签: c++ data-structures

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

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

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

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

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

2 个答案:

答案 0 :(得分:1)

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

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

另一种方法是创建自己的优先级队列,例如基于std::vectorstd::make_heapstd::pop_heapstd::push_heapstd::priority_queue在内部使用这些功能。

答案 1 :(得分:0)

一个集合可以工作,但你可以创建一个向量,保留足够的容量,然后使用lower_bound使用已排序的插入。由于字符串交换成本很低,所以应该没问题(在任何情况下450都是一个很小的数字)。

矢量具有恒定时间查找和随机访问,因此如果您不需要插入和删除很多,那么它是更好的选择。