異なるベクトルの値に基づいてベクトルを並べ替える
同じ長さの複数のベクトルがあり、次のことを行うシナリオを考えてみましょう。 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 サイトの他の関連記事を参照してください。