カンテラの光の下で

dNaga392's memorandom

【C++】std::sort とラムダ式を使ったカスタムソート

クラスや構造体のソートには、標準ライブラリ <algorithm>std::sort を使う方法があります。 Qt でも同様の qSort がありましたが、 std::sort に置き換えることが推奨されています。

次の例は、座標情報のリストに対して、第1ソート条件にX座標の逆順、第2ソート条件にY軸の正順を適用したものです。

    QList<QPoint> points({{0, 4}, {2, 2}, {1, 3}, {3, 1}});
    std::sort(points.begin(), points.end(),
              [](const QPoint& p, const QPoint& q) -> bool {
                  if (p.x() == q.x())
                  {
                      return p.y() < q.y();
                  }
                  return p.x() > q.x();
              });
    qDebug() << points;  // => (QPoint(3,1), QPoint(2,2), QPoint(1,3), QPoint(0,4))

std::sort は昇順でソートされます。

第一引数と第二引数は、それぞれコンテナの開始と終了のイテレータです。

第三引数は bool cmp(const T &a, const T &b); と等価なラムダ式であり、operator< と同じ意味を持ちます。 つまり、上の例では p < q となるならば true、そうでなければ false となります。

Sort it Color Balls 3D

Sort it Color Balls 3D

  • 発売日: 2020/02/13
  • メディア: アプリ