按不同向量中的值對向量進行排序
考慮這樣的場景:您有多個長度相等的向量,並且旨在對一個向量進行排序基於來自不同向量的值。例如,您可能有一個整數向量 Index 和一個字串向量 Values。對 Index 向量進行排序後,應相應地對 Values 向量中的元素進行重新排序。
一個有效的方法是建立一個向量,將 中的元素配對Index 向量及其對應的索引。然後可以使用自訂排序函數對這個向量 order 進行排序,該函數比較 Index 向量中的元素。排序後的 order 向量擷取所需的排序順序。
使用此排序順序,您可以對其他向量重新排序。考慮以下程式碼片段:
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); sort(order.begin(), order.end(), ordering());
ordering 函數依據 Index 向量中的值對 order 向量進行排序。然後,您可以使用order 向量對Values 向量重新排序,程式碼如下:
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中文網其他相關文章!