乐闻世界logo
搜索文章和话题

How to sort and keeping track of indexes in C ++ ?

2 个月前提问
2 个月前修改
浏览次数27

1个答案

1

这在很多应用场景中是非常有用的,比如数据分析、机器学习等领域,在这些领域中经常需要根据某些标准对数据进行排序,但同时需要保留数据原本的位置信息以供后续处理使用。

在C++中,我们可以使用多种方式实现这一功能,下面我将介绍两种常见的方法:

方法1:使用额外的索引数组

这种方法的思路是创建一个索引数组,初始时该数组的元素是按顺序排列的,然后根据数据数组的值来对索引数组进行排序。

cpp
#include <algorithm> #include <iostream> #include <vector> int main() { std::vector<int> data = {10, 20, 5, 23, 50}; std::vector<int> indices(data.size()); // 初始化索引数组 for (int i = 0; i < indices.size(); ++i) indices[i] = i; // 使用lambda表达式进行排序,根据data的值排序indices std::sort(indices.begin(), indices.end(), [&](int i, int j) { return data[i] < data[j]; }); // 输出排序后的索引 for (int index : indices) { std::cout << "Value: " << data[index] << ", Original Index: " << index << std::endl; } return 0; }

方法2:使用pair数组

另一种方法是创建一个 pair类型的数组,每个 pair存储一个值和它的原始索引,然后根据值对这个数组进行排序。

cpp
#include <algorithm> #include <iostream> #include <vector> int main() { std::vector<int> data = {10, 20, 5, 23, 50}; std::vector<std::pair<int, int>> value_index_pairs; // 创建pair数组 for (int i = 0; i < data.size(); ++i) { value_index_pairs.emplace_back(data[i], i); } // 对pair数组进行排序 std::sort(value_index_pairs.begin(), value_index_pairs.end()); // 输出排序后的结果 for (const auto& pair : value_index_pairs) { std::cout << "Value: " << pair.first << ", Original Index: " << pair.second << std::endl; } return 0; }

这两种方法各有优势,第一种方法使用原始数据和一个单独的索引数组,保持数据不变,这对于数据量较大时非常有用。第二种方法通过将数据和索引捆绑在一起,使得代码更简洁易于理解,但可能会额外增加内存使用(尽管通常这种增加是微不足道的)。

以上就是在C++中对索引进行排序和跟踪的几种常见方法,通过这些方法,我们可以在不改变原始数据的情况下,有效地对数据进行排序管理。对于复杂的数据处理任务,这些技巧尤其重要。

2024年7月22日 17:51 回复

你的答案