ホームページ > バックエンド開発 > C++ > 単一のベクトルの値に基づいて複数のベクトルを並べ替えるにはどうすればよいですか?

単一のベクトルの値に基づいて複数のベクトルを並べ替えるにはどうすればよいですか?

Susan Sarandon
リリース: 2024-12-29 20:04:14
オリジナル
682 人が閲覧しました

How to Sort Multiple Vectors Based on the Values of a Single Vector?

異なるベクトルの値に基づいてベクトルを並べ替える

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート