ホームページ > バックエンド開発 > C++ > 元のインデックスを保持しながら C でベクトルをソートするにはどうすればよいですか?

元のインデックスを保持しながら C でベクトルをソートするにはどうすればよいですか?

DDD
リリース: 2024-12-25 02:50:13
オリジナル
289 人が閲覧しました

How Can I Sort a Vector in C   While Preserving Original Indices?

C でのインデックス保持による並べ替え

データ操作の分野では、並べ替えは要素を希望の順序に配置する基本的な操作です。並べ替えアルゴリズムは本質的に等しい要素の順序を保持しますが、並べ替えられた要素の元のインデックスを追跡して元のコンテキストを維持することが望ましい場合があります。

この問題に対する 1 つのアプローチは、C 11 でラムダ関数を使用することです。ラムダは、周囲のスコープから変数をキャプチャできる匿名関数です。これにより、外部データにアクセスできる簡潔かつ柔軟な並べ替え操作が可能になります。

ここでは、ラムダと標準ライブラリのsteady_sort アルゴリズムを組み合わせたカスタマイズされた sort_indexes 関数を示します。

#include <vector>
#include <algorithm>

using namespace std;

template <typename T>
vector<size_t> sort_indexes(const vector<T> &v) {

  // Initialize original indexes
  vector<size_t> idx(v.size());
  iota(idx.begin(), idx.end(), 0);

  // Sort indexes based on values in v
  stable_sort(idx.begin(), idx.end(),
               [&](size_t i1, size_t i2) { return v[i1] < v[i2]; });

  return idx;
}
ログイン後にコピー

この関数では、まず次のことを行います。入力ベクトル v の元のインデックスを使用してベクトル idx を初期化します。次に、stable_sort を使用してラムダに基づいてインデックスを並べ替えます。 v の値を比較するコンパレータ。stable_sort を使用すると、等しい値を持つ要素が並べ替えられた結果内で元の順序を維持することが保証されます。

この関数を使用するには、要素のベクトルを引数として渡すだけで、ソートされたインデックスのベクトルを返します。たとえば、ベクトル [5, 2, 1, 4, 3] の場合、返されるベクトル IDx は [1, 2, 4, 3, 0] になります。

この手法を使用すると、要素を並べ替えながら要素を並べ替えることができます。元のインデックスを保持し、後続のデータ処理タスクで柔軟性を提供します。

以上が元のインデックスを保持しながら C でベクトルをソートするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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