基於外部參考向量對向量進行排序
在存在多個長度相等的向量的情況下,對一個向量進行排序需要一個解決方案:同時相應地變換所有其他向量。
考慮以下內容場景:
std::vector<int> Index = { 3, 1, 2 }; std::vector<std::string> Values = { "Third", "First", "Second" };
轉換:索引已排序。
預期結果:數值也應該排序。
一種方法涉及建立一個向量,其中包含原始索引和排序指令中的元素向量:
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中文網其他相關文章!