我有多个字符串数组,我使用比较函数在优先级队列中对它们进行排序。我忽略了我需要遍历字符串的事实..
您会推荐哪些其他数据结构?也许某些东西允许比较函数,以便我得到一组有序的字符串
我可以有效地从优先级队列中弹出元素,但这意味着在将它们推回到优先级队列之前我需要辅助空间
如果向量允许比较函数,那将是理想的。 STL“设定”会起作用吗?我有固定数量的元素(约450)。
编辑:确认STL的设置正在工作..即使没有为字符串定义我自己的比较函数。
答案 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::vector
和std::make_heap,std::pop_heap和std::push_heap。 std::priority_queue
在内部使用这些功能。
答案 1 :(得分:0)
一个集合可以工作,但你可以创建一个向量,保留足够的容量,然后使用lower_bound
使用已排序的插入。由于字符串交换成本很低,所以应该没问题(在任何情况下450都是一个很小的数字)。
矢量具有恒定时间查找和随机访问,因此如果您不需要插入和删除很多,那么它是更好的选择。