gpt4 book ai didi

c++ - 排序后如何获取索引排列

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

给定一个数组arr = {5, 16, 4, 7},我们可以通过sort(arr, arr+sizeof(arr)/sizeof(arr[0] ))。所以现在数组 arr = {4, 5, 7, 16} 和排序数组的排列索引是 {2, 0, 3, 1}。换句话说,原始数组中的 arr[2] 现在是排序数组中位置 0 的最小元素。

有没有一种有效的方法可以让我们得到排列索引?

最佳答案

创建一个索引数组,用数字 0..N-1 填充它,然后使用自定义比较器对其进行排序。比较器应该比较原始数组中索引 lhsrhs 处的项目。以这种方式对索引数组进行排序会将它们重新排序为排列:

vector<int> data = {5, 16, 4, 7};   
vector<int> index(data.size(), 0);
for (int i = 0 ; i != index.size() ; i++) {
index[i] = i;
}
sort(index.begin(), index.end(),
[&](const int& a, const int& b) {
return (data[a] < data[b]);
}
);
for (int i = 0 ; i != index.size() ; i++) {
cout << index[i] << endl;
}

这会打印出 2, 0, 3, 1

这里是 demo on ideone .

注意:您可以使用 index 来按排序顺序检索 data:

for (int i = 0 ; i != index.size() ; i++) {
cout << data[index[i]] << endl;
}

关于c++ - 排序后如何获取索引排列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17554242/

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