2017-08-03 3 views
0

目的:私は2dベクトルを持っています。私はそれを4列目の値でソートしたい。 例えば、私は、このベクトルをソートする:C++各行の列の値で2次元ベクトルの行を並べ替える方法

vector<vector<double>> vector1 = {{4,3,5,3}, 
            {2,6,3,7}, 
            {6,8,5,1}, 
            {5,6,1,5}}; 

列内のその要素の位置は不変であるが、ベクター内の行の位置が変更されるように、私は、4番目のカラムの値によって、その行をソートします4列目の要素は、この順序になるように:

vector1 = {{6,8,5,1}, 
      {4,3,5,3}, 
      {5,6,1,5}, 
      {2,6,3,7}}; 

、私は)(私は、ソートに使用する必要がありますと仮定していますが、オンラインの周りに検索した後、私はまだ正直これについて移動する方法を絶対にないアイデアを持っていませんコードやウェブサイトやリソースへの直接的な助けがあれば、本当に感謝しています。 ありがとう!

答えて

6

カスタム述語で使用std::sort、例えば:

std::sort(vector1.begin(), 
      vector1.end(), 
      [] (const std::vector<double> &a, const std::vector<double> &b) 
      { 
       return a[3] < b[3]; 
      }); 

(もちろん、適切なエラーチェック、と)。

これは、4番目の要素(「行」の4番目の列)を指定して、与えられた述語に対して「外側ベクトル」(各行は1行に対応する1Dベクトル)の各項目を並べ替えます。

ドキュメントで詳述されているように、述部は2つの項目を取り、最初の項目が「厳密に少ない」場合はtrueを、それ以外の場合はfalseを返します。数値型を比較す​​るときには、<演算子を使うだけでよいので、これはすばらしく簡単です。あなたの場合、4番目の要素がより小さい場合、1つの「行」は「より小さい」です。

編集:デモの作業については、hereを参照してください。

+0

ありがとうございました! – jdough

関連する問題