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

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

Barbara Streisand
リリース: 2024-12-29 04:14:12
オリジナル
816 人が閲覧しました

How to Sort One Vector Based on the Values of Another Vector?

異なるベクトルの値によるベクトルの並べ替え

同じ長さの複数のベクトルがあり、1 つのベクトルを並べ替えることを目的とするシナリオを考えてみましょう。別のベクトルからの値に基づきます。たとえば、整数のベクトル Index と文字列のベクトル Values があるとします。 Index ベクトルを並べ替えると、それに応じて Values ベクトル内の要素の順序が変更されます。

1 つの効果的なアプローチは、 の要素をペアにするベクトルを作成することです。 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;
}
ログイン後にコピー

この方法では、1 つのベクトルを値で並べ替えることができます。別のベクトルを作成し、同じ並べ替えを追加のベクトルに適用します。

以上があるベクトルを別のベクトルの値に基づいて並べ替えるにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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