在C 排序過程中保留原始索引
在保留原始索引的同時對資料進行排序是資料操作任務中的常見要求。在C 中,使用標準函式庫,此任務包含以下步驟:
C 11 中的實作:
#include <iostream> #include <vector> #include <numeric> // std::iota #include <algorithm> // std::sort, std::stable_sort using namespace std; 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 comparing values in v // Using std::stable_sort instead of std::sort // to avoid unnecessary index re-orderings // when v contains elements of equal values stable_sort(idx.begin(), idx.end(), [&v](size_t i1, size_t i2) {return v[i1] < v[i2];}); return idx; }
範例用法:
vector<double> values = {5, 2, 1, 4, 3}; vector<size_t> sorted_indexes = sort_indexes(values); for (auto i : sorted_indexes) { cout << values[i] << endl; }
以上是在C中對資料進行排序時如何保留原始索引?的詳細內容。更多資訊請關注PHP中文網其他相關文章!