首页 >后端开发 >C++ >如何在跟踪原始索引的同时对 C 中的数据进行排序?

如何在跟踪原始索引的同时对 C 中的数据进行排序?

Barbara Streisand
Barbara Streisand原创
2025-01-03 12:54:40169浏览

How Can I Sort Data in C   While Tracking Original Indices?

在 C 中使用索引跟踪进行排序

在保留原始索引的同时对数据进行排序是数据分析和操作中的常见任务。在 C 中,实现这一点需要一些深思熟虑的编程技术。

要按升序对样本序列进行排序,同时跟踪其原始索引,可以利用 lambda 表达式和标准库。下面的 sort_indexes 函数演示了这种方法:

template <typename T>
vector<size_t> sort_indexes(const vector<T> &v) {
  // Initialize original index locations
  vector<size_t> idx(v.size());
  iota(idx.begin(), idx.end(), 0);

  // Sort indexes based on values in v using std::stable_sort to maintain original order for equal values
  stable_sort(idx.begin(), idx.end(),
    [&v](size_t i1, size_t i2) { return v[i1] < v[i2]; });

  return idx;
}

此函数返回可在后续迭代中使用的索引向量:

for (auto i : sort_indexes(v)) {
  cout << v[i] << endl;
}

可以进行自定义以提供排序函数,比较器,或在 sort_indexes 函数中自动重新排序原始向量。

以上是如何在跟踪原始索引的同时对 C 中的数据进行排序?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn