根據不同std::vector 的值對std::vector 進行排序
此問題涉及將向量的排序與另一個向量的順序。例如,向量 Index 包含數字 [3, 1, 2],向量 Values 包含字串「Third, First, Second」。依升序排序索引 ([1, 2, 3]) 應該會導致值依相應的順序排序 (["First", "Second", "Third"])。
解:
一個常見的方法是透過組合 Index 中的索引及其 Values 中的對應元素來建立向量順序。然後可以使用自訂比較器對該向量進行排序,該比較器比較索引中的元素:
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; } Values = sort_from_ref(Values, order);
此函數採用原始向量和包含排序索引的參考向量,並傳回對應排序的副本。
以上是如何依照另一個「std::vector」的順序對一個「std::vector」進行排序?的詳細內容。更多資訊請關注PHP中文網其他相關文章!