gpt4 book ai didi

c++ - 如何对 std::list 的一部分进行排序?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:51:40 25 4
gpt4 key购买 nike

#include <iostream>
#include <list>
#include <algorithm>

int main()
{
std::list<int> numbers = {1, 3, 0, -8, 5, 3, 1};
auto positionInMiddle = std::find(numbers.begin(), numbers.end(), -8);

std::sort(positionInMiddle, numbers.end()); // This doesn't work,
// Needs random access iterator.

numbers.sort(); // This sorts the entire list.

for (int i : numbers)
std::cout << i << std::endl;
return 0;
}

我可以使用一些技巧吗?例如,如果有一种方法可以交换列表中的两个节点,那么我可以使用合并排序。

最佳答案

列表有固定时间的插入和删除,所以用 splice 制作一个临时列表来排序是相当快的插入明智的(不幸的是,在复制元素时仍然是线性的):

#include <iostream>
#include <list>
#include <algorithm>

int main()
{
std::list<int> numbers = {1, 3, 0, -8, 5, 3, 1};
auto positionInMiddle = std::find(numbers.begin(), numbers.end(), -8);

std::list<int> temp;
temp.splice(temp.end(), numbers, positionInMiddle, numbers.end());
temp.sort();
numbers.splice(numbers.end(), temp, temp.begin(), temp.end());

for (int i : numbers)
std::cout << i << std::endl;
return 0;
}

关于c++ - 如何对 std::list 的一部分进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18074700/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com