📜  在C++ STL中对向量排序后,跟踪先前的索引(1)

📅  最后修改于: 2023-12-03 15:07:52.314000             🧑  作者: Mango

在C++ STL中对向量排序后,跟踪先前的索引

在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()函数对新的向量按元素值进行排序。最后,我们打印排序后的元素值和先前的索引位置。

此方法既简单又有效,可以在大多数情况下轻松跟踪先前的索引。