gpt4 book ai didi

c++ - 排序相关算法(用排序集合中的索引替换每个项目)

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

我需要做以下事情:

给定 intstd::vector 我需要将每个 int 替换为如果 vector 是排序。

我会尝试用一个例子更好地解释它。

输入:{22, 149,31}

输出:{2, 0, 1}

(请注意,在排序 vector {149, 31, 22} 中,22 在排序 vector 的 index 2 中,149index 0,而 31index 1)

我希望我把算法说清楚。

这是在 STL C++11 库中以某种方式实现的吗?这个算法有名字吗?您能提供任何想法来优雅地实现它吗?

最佳答案

我认为它没有名字,但它很容易实现。

首先,您创建一个目标 vector 并用索引 0...n 填充它。

vector<int> indices(input.size());
std::iota(indices.begin(), indices.end(), 0);

其次,您对该 vector 进行排序,但不是比较 vector 中的数字,而是比较输入 vector 中相关索引处的数字。

std::sort(indices.begin(), indices.end(),
[&input](int l, int r) { return input[l] < input[r]; });

编辑 请注意,我按升序排序,而您正在查找降序。只需翻转 lambda 中的比较即可。

关于c++ - 排序相关算法(用排序集合中的索引替换每个项目),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19432272/

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