【问题标题】:Partial sort of std::liststd::list 的部分排序
【发布时间】:2008-10-19 22:33:52
【问题描述】:

我有一个我想要对其进行排序的链表,例如:

std::sort(someIterator, otherIterator, predicate);

std::sort 需要随机访问迭代器,因此这种方法不起作用。有一个专门化的 std::list::sort,但它只能对整个列表进行排序。我认为我没有足够的权限访问列表成员来自己编写一些东西。

有没有办法做到这一点而不改变,比如说,矢量?

【问题讨论】:

  • 您使用列表而不是向量的主要原因是什么?尽管 std::vector 必须在 avg 上执行移动。半个元素(例如删除时),由于缓存,它非常快。即使在 rand 上频繁删除和插入,std::vector 也优于 std::list。位置您必须拥有大量元素才能使用列表获利。
  • 老实说我不记得了,因为自从我问起三年半以来,我很确定它以某种方式被重构了,而且我早就离开了那份工作。问题的重点不在于效率(尽管很有可能有足够的数据我不想在运行中复制它们),而更多的是好奇心;奇怪的是,我似乎无法进行这种部分排序,并且应该有某种方法来实现它。
  • 哦 :D 我的错...我通过搜索而不是通过“活动问题页面”发现了这个问题,并没有意识到 :) 我实际上认为这是一个活动问题。

标签: c++ stl


【解决方案1】:

如何将列表中您要排序的部分解开到一个独立的列表中, 然后使用专门的列表排序,然后将其钩回原始列表中?

【讨论】:

  • 这是个好主意。很容易忘记 splice() 方法的强大功能。
【解决方案2】:

是的,但您必须使用merge sort

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-02-14
    • 2011-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-28
    • 2019-08-08
    • 1970-01-01
    相关资源
    最近更新 更多