あなたははstdするpredicatを与えることができます::
のようなソートを
std::vector<MyStruct> ary(SIZE);
std::sort(ary.begin(), ary.end(), [](auto a, auto b){return a.level < b.level;});
まず、私はencouraあなたはC++のモダンではnew, new[], delete, delete[]
を使用しないでください。 コンテナとスマートポインタを使用する方が良いです(ここではstd::vector
を使用しています)
次に、意味は:[](auto a, auto b){return a.level < b.level;}
です。
ラムダと呼ばれる「オブジェクト」です。ラムダは、ちょっと機能のようなものかそのようなものです。この関数は2つの引数をとります:aとbは、コンパイル時に自動的に導き出されます(自動のおかげで)。
機能全体がプリディカートと呼ばれるものです。ここでは、レベル部分のみを比較したいので、私はa.level < b.level
を使用しています。
また、あなたがここにstd::sort
機能のドキュメントをチェックすることができます:あなたが見ることができるように http://en.cppreference.com/w/cpp/algorithm/sort
を、私はこの1つ使用しています:
template< class RandomIt, class Compare >
void sort(RandomIt first, RandomIt last, Compare comp);
Compare comp
をここで私はで定義されたpredicatがありますラムダ。ここでラムダhttps://stackoverflow.com/a/7627218/4950448
ミカエルロイが示唆のように、あなたがC++ 98を使用しなければならない場合は、あなたが「ファンクタ」を使用することができます(名前がわからない)
struct CompareStructOperatorLess {
bool operator()(const MyStruct &a, const MyStruct &b) const {
return a.level < b.level;
}
};
...
std::sort(ary.begin(), ary.end(), CompareStructOperatorLess());
std :: sortは、比較演算子を使用してカスタム演算子を渡すことができます。このような述語を使用する方法を知ることで、問題が解決されます。何を試しましたか? –