[](const vector<int>& interval1, const vector<int>& interval2) { return interval1[0] < interval2[0];
这段代码是 C++ 中的一个 Lambda 表达式,作为自定义比较函数用于排序操作(如 std::sort
)。它的核心功能是定义两个区间(vector<int>
对象)的排序规则:按照每个区间的起始值(即区间向量的第一个元素)进行升序排序。以下是详细解析:
1. Lambda 表达式结构
[](const vector<int>& interval1, const vector<int>& interval2) {
return interval1[0] < interval2[0];
}
-
[]
(捕获列表)为空表示不捕获任何外部变量,仅使用参数列表中的变量。
-
(const vector<int>& interval1, const vector<int>& interval2)
(参数列表)接受两个参数
interval1
和interval2
,均为常量引用(避免拷贝开销),代表待比较的两个区间。 -
{ return interval1[0] < interval2[0]; }
(函数体)比较逻辑:若
interval1
的起始值(interval1[0]
)小于interval2
的起始值(interval2[0]
),则返回true
,否则返回false
。
2. 在排序中的作用
当此 Lambda 作为比较函数传递给 std::sort
时,它决定了区间向量的排序规则:
std::sort(intervals.begin(), intervals.end(),
[](const vector<int>& a, const vector<int>& b) {
return a[0] < b[0];
});
-
排序结果:所有区间按起始值从小到大升序排列。
示例:
输入
[[2,5], [1,3], [4,8]]
→ 排序后[[1,3], [2,5], [4,8]]
。
3. 为何需要这样的比较函数?
-
区间合并问题需求:
在合并重叠区间时(如 LeetCode 56 题),需先将区间按起始值排序,确保相邻区间可能重叠(例如
[1,3]
和[2,5]
重叠)。 -
排序依赖起始值:
若起始值无序,后续无法高效合并(如
[4,8]
和[1,3]
不重叠,但[1,3]
和[2,5]
重叠)。
4. 关键细节
-
返回值含义:
return a[0] < b[0]
表示a
应排在b
之前时返回true
(升序)。 -
引用传递
const vector<int>&
:避免拷贝整个向量,提升效率(尤其区间数量多时)。
-
常量性(
const
):确保比较过程不修改区间内容,保证排序安全性。
5. 对比其他排序方式
方法 |
示例 |
特点 |
---|---|---|
Lambda 表达式 |
|
简洁,适合一次性使用 |
函数对象(仿函数) |
|
可复用,支持复杂逻辑 |
默认排序( |
|
需重载 |
总结
这段 Lambda 表达式的作用是:为区间向量定义排序规则,强制所有区间按起始值升序排列。这是解决区间重叠问题的关键预处理步骤,确保后续合并逻辑的正确性和高效性。其设计兼顾了效率(引用传递)、安全性(常量性)和简洁性(Lambda 语法)。