下标运算符在排序比较函数中是什么意思?
what does the subscript operator mean in sort compare function?
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}
是什么意思?函数指针或其他什么?我想不出要搜索的关键字。
那是一个 Lambda Expression,下标运算符就是引入它的原因。 Lambda 表达式是在 C++11 中引入的。
没有比上面链接的 MSDN 文章更好的了,它定义了一个 lambda 表达式,如下所示:
is a convenient way of defining an anonymous function object right at the location where it is invoked or passed as an argument to a function.
这是一个 lambda 表达式。请参阅下面的示例:
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
);
}
作为参数传递的函数没有 "function name" - 它是匿名的。这是一个有用的抽象,因为所需要的只是传递的功能(名称无关紧要)。
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}
是什么意思?函数指针或其他什么?我想不出要搜索的关键字。
那是一个 Lambda Expression,下标运算符就是引入它的原因。 Lambda 表达式是在 C++11 中引入的。
没有比上面链接的 MSDN 文章更好的了,它定义了一个 lambda 表达式,如下所示:
is a convenient way of defining an anonymous function object right at the location where it is invoked or passed as an argument to a function.
这是一个 lambda 表达式。请参阅下面的示例:
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
);
}
作为参数传递的函数没有 "function name" - 它是匿名的。这是一个有用的抽象,因为所需要的只是传递的功能(名称无关紧要)。