根據不同向量的值對向量進行排序
考慮這樣一個場景,您有多個長度相同的向量,並且您想若要依指定順序對一個向量進行排序,同時對其他向量套用相同的排列。這就提出瞭如何在多個向量中利用這種排序模式的挑戰。
解決方案
要按來自不同向量的值對向量進行排序,您可以使用自訂排序器並使用向量,將每個元素的索引與其在排序向量中的對應值配對。
typedef vector<int>::const_iterator myiter; vector<pair<size_t, myiter>> order(Index.size()); size_t n = 0; for (myiter it = Index.begin(); it != Index.end(); ++it, ++n) order[n] = make_pair(n, it); struct ordering { bool operator ()(pair<size_t, myiter> const& a, pair<size_t, myiter> const& b) { return *(a.second) < *(b.second); } }; sort(order.begin(), order.end(), ordering());
一旦你有了排序後,您可以將其用作其他向量中每個元素的新索引的查找表。
template <typename T> vector<T> sort_from_ref( vector<T> const& in, vector<pair<size_t, myiter>> const& reference ) { vector<T> ret(in.size()); size_t const size = in.size(); for (size_t i = 0; i < size; ++i) ret[i] = in[reference[i].first]; return ret; }
透過應用此過程,您可以有效地對目標向量進行排序,並將相同的轉換應用於其他向量中的對應元素。
以上是如何根據單一向量的值對多個向量進行排序?的詳細內容。更多資訊請關注PHP中文網其他相關文章!