![](/img/trans.png)
[英]What is the Time and space complexity of sort() in C++ with custom comparator function?
[英]what is custom comparator and how to use it in the sort function in c++?
vector<vector<int>> reconstructQueue(vector<vector<int>> &people) {
auto cmp = [](const vector<int> &a, const vector<int> &b) {
return a[0] > b[0] || (a[0] == b[0] && a[1] < b[1]);
};
sort(people.begin(), people.end(), cmp);
嘿伙计们,有人可以向我解释 auto cmp ... 部分以及如何在排序功能中使用它,任何帮助将不胜感激:)
这部分代码是一个lambda 。 换句话说,一个本地定义的小函数。 您可以搜索此词以获取更多信息。
在排序算法的情况下,您应该传递一个带有两个参数的函数,如果第一个参数小于第二个参数,则返回 true。 为简单起见,您提供了一个替代的比较函数来代替标准operator<
aka std::less。 可以使用任何具有operator()
对象。
比较器可以通过多种方式实现,例如。 一个 lambda(如你的例子)或一个可调用的结构/类。 只是为了给你一个排序的例子,说一个 std::pair 向量按第二个元素:
struct Comparator
{
bool operator()(const std::pair<int,int>& lhs, const std::pair<int,int>& rhs)
{
return lhs.second < rhs.second;
}
}
void foo(std::vector<std::pair<int,int> > &v)
{
std::sort(v.begin(), v.end(), Comparator);
}
或者,您可以使用 lambda 将 foo 编写为:
void foo(std::vector<std::pair<int,int> > &v)
{
std::sort(v.begin(), v.end(),
[](const pair<int, int>& lhs, const pair<int, int>& rhs)
{
return lhs.second < rhs.second;
} );
}
您可以通过捕获一些其他数据并将其用于比较来编写更高级的比较。 尝试阅读有关lambdas 的信息。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.