5

目的: 2D ベクトルがあります。4列目の値で並べ替えたい。たとえば、このベクトルを並べ替えたい:

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}};

私は sort() を使用する必要があると想定していますが、オンラインで検索した後でも、これを行う方法がまったくわからないので、コードに関する直接的なヘルプや、Web サイトやリソースへの指示さえあれば、本当に感謝しています. ありがとう!

4

1 に答える 1

15

std::sortカスタム述語とともに使用します。例:

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

(もちろん、適切なエラーチェックを行います)。

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

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

編集:動作デモについては、こちらを参照してください。

于 2017-08-03T21:14:21.637 に答える