外部参照ベクトルに基づいたベクトルの並べ替え
同じ長さのベクトルが複数存在する状況では、1 つのベクトルを並べ替えるには次のような解決策が必要です。それに応じて他のすべてのベクトルも同時に変換します。
次のことを考慮してください。シナリオ:
std::vector<int> Index = { 3, 1, 2 }; std::vector<std::string> Values = { "Third", "First", "Second" };
変換: インデックスはソートされます。
期待される結果: 値もソートされる必要があります。
1 つのアプローチには、元のインデックスとソート指示の要素の両方を含むベクトルを作成することが含まれます。ベクトル:
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 中国語 Web サイトの他の関連記事を参照してください。