【问题标题】:Data structure for sorting/retrieval strings用于排序/检索字符串的数据结构
【发布时间】:2011-07-02 16:30:50
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • 您可以在std::vector 上使用std::sort,并且可以传入一个比较函数来定义排序顺序。除了能够按顺序迭代之外,您还需要什么?
  • 比较函数不是容器的属性,而是排序算法的;任何带有随机访问迭代器的有序容器都可以与std::sort 一起工作,这反过来又允许自定义比较函子。

标签: c++ data-structures


【解决方案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 在内部使用这些函数。

【讨论】:

    【解决方案2】:

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

    向量具有恒定时间查找和随机访问,因此如果您不需要大量插入和擦除,它是一个更好的选择。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-06-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-20
      • 1970-01-01
      • 2012-01-28
      相关资源
      最近更新 更多