struct pair{
int first;
int second;
}
vector<pair> v;
sort(v.begin(), v.end(), [](pair p1, pair p2){return p1.first < p2.first});
とはどういう[](pair p1, pair p2){return p1.first < p2.first}
意味ですか? 関数ポインタか何か?検索キーワードがわかりません。
struct pair{
int first;
int second;
}
vector<pair> v;
sort(v.begin(), v.end(), [](pair p1, pair p2){return p1.first < p2.first});
とはどういう[](pair p1, pair p2){return p1.first < p2.first}
意味ですか? 関数ポインタか何か?検索キーワードがわかりません。
これはラムダ式であり、添え字演算子がそれを導入します。ラムダ式は C++11 で導入されました。
ラムダ式を次のように定義している、上にリンクされている MSDN の記事よりもうまく言えませんでした。
関数への引数として呼び出されたり渡されたりする場所で無名関数オブジェクトを定義する便利な方法です。
これはラムダ式です。以下の例を参照してください。
void abssort(float* x, unsigned n) {
std::sort(x, x + n,
// Lambda expression begins
[](float a, float b) {
return (std::abs(a) < std::abs(b));
} // end of lambda expression
);
}
パラメータとして渡される関数には「関数名」がありません。これは匿名です。必要なのは渡される機能だけなので、これは便利な抽象化です (名前は関係ありません)。