【发布时间】:2020-07-22 08:12:16
【问题描述】:
我需要按每个元素向量的第一个元素对向量向量进行排序。它是针对 Leetcode 中的merge intervals 问题。
我为这个问题写了以下代码:
class Solution {
public:
static bool comparison(const vector<int>& v1, const vector<int>& v2){
if(v1[0]==v2[0])
return v1[1]<=v2[1];
else
return v1[0]<v2[0];
}
vector<vector<int>> merge(vector<vector<int>>& intervals) {
sort(intervals.begin(), intervals.end(), comparison);
int n = intervals.size();
vector<vector<int>> res;
if(n >= 1)
res.push_back(intervals[0]);
for(int i=0;i<n;i++){
vector<int> rv = res.back();
vector<int> iv = intervals[i];
if(rv[1] >= iv[0]){
res.pop_back();
res.push_back({min(rv[0], iv[0]), max(iv[1], rv[1])});
}
else{
res.push_back(iv);
}
}
return res;
}
};
我在比较函数中尝试做的是,如果向量元素的第一个元素相同,我将使用第二个元素进行排序。此代码仅针对一个测试用例给出运行时错误(运行时错误:引用绑定到类型为 'const int' (stl_vector.h) 的空指针)。 如果我将比较函数更改为以下,它适用于所有测试用例:
static bool comparison(const vector<int>& v1, const vector<int>& v2){
return v1[0]<v2[0];
}
谁能解释一下原因?
【问题讨论】:
-
传递给比较函数的向量是否有多个元素?您确定传递给比较函数的向量实际上根本没有任何元素吗?
-
如果您阅读the requirements进行比较,您会发现关系必须是strict weak ordering。
-
请注意
std::vector::operator<存在,并且将与comparison一样对2 个元素向量进行排序 -
@Someprogrammerdude 所有向量都有元素且只有 2 个元素
标签: c++ runtime-error comparator