gpt4 book ai didi

c++ - 创建排序 vector 的索引 vector

转载 作者:IT老高 更新时间:2023-10-28 22:32:28 55 4
gpt4 key购买 nike

变量 xn 的 vector 整数,我想按升序对 vector 进行排序。但是,由于此问题范围之外的原因,我希望保持不变。因此,而不是实际排序 x 的内容,我想创建另一个 n 的 vector 索引,其中每个索引引用 x 中的相应值, 如果 x应该已经排序了。

例如:

std::vector<int> x = {15, 3, 0, 20};
std::vector<int> y;
// Put the sorted indices of x into the vector y
for (int i = 0; i < 4; i++)
{
std::cout << y[i];
}

应该给出输出:

2
1
0
3

对应x中的值:

0
3
15
20

我可以想到很多及时的方法来实现这个,但我想知道 STL 是否有内置的东西可以为我有效地执行这个?

最佳答案

1) 创建 y 作为索引 vector (整数范围)

2) 使用返回 x 中的索引元素的比较器对该范围进行排序使用标准库,这给出了:

#include <iostream>
#include <vector>
#include <algorithm>

int main() {

std::vector<int> x = {15, 3, 0, 20};

std::vector<int> y;

std::vector<int> y(x.size());
std::size_t n(0);
std::generate(std::begin(y), std::end(y), [&]{ return n++; });

std::sort( std::begin(y),
std::end(y),
[&](int i1, int i2) { return x[i1] < x[i2]; } );

for (auto v : y)
std::cout << v << ' ';

return 0;
}

Live demo.

关于c++ - 创建排序 vector 的索引 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25921706/

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