📅  最后修改于: 2023-12-03 15:07:52.314000             🧑  作者: Mango
在C++ STL中,我们可以使用sort()
函数对向量进行排序。但是,在排序后,我们可能需要知道每个元素在原始向量中的索引位置,以便进行进一步的处理。
下面是一个简单的方法来跟踪先前的索引。
#include <algorithm>
#include <iostream>
#include <vector>
using namespace std;
// 定义一个结构体,用于存储元素的值和索引位置
struct IndexedValue {
int value;
int index;
};
// 比较函数,按元素的值进行排序
bool compareValues(const IndexedValue &a, const IndexedValue &b) {
return a.value < b.value;
}
int main() {
// 创建一个向量
vector<int> vec = {4, 1, 6, 2, 8, 3};
// 定义一个新的向量,用于存储每个元素的值和索引位置
vector<IndexedValue> indexedVec(vec.size());
for (int i = 0; i < vec.size(); i++) {
indexedVec[i].value = vec[i];
indexedVec[i].index = i;
}
// 对新的向量按元素值进行排序
sort(indexedVec.begin(), indexedVec.end(), compareValues);
// 打印排序后的元素值和先前的索引位置
for (int i = 0; i < indexedVec.size(); i++) {
cout << indexedVec[i].value << " at index " << indexedVec[i].index << endl;
}
return 0;
}
在上面的代码中,我们首先定义了一个结构体IndexedValue
,用于存储元素的值和索引位置。然后,我们创建了一个新的向量indexedVec
,将每个元素的值和索引位置存储到该向量中。接下来,我们使用sort()
函数对新的向量按元素值进行排序。最后,我们打印排序后的元素值和先前的索引位置。
此方法既简单又有效,可以在大多数情况下轻松跟踪先前的索引。