C++ 使用比较器函数[c+;+;]时出现问题
当使用下面给出的比较器函数时,我得到一个分段错误:-C++ 使用比较器函数[c+;+;]时出现问题,c++,comparator,C++,Comparator,当使用下面给出的比较器函数时,我得到一个分段错误:- class Solution { public: static bool comp( pair<int,pair<int,int> > &a, pair<int,pair<int,int> > &b ) { if(a.first <= b.first) return 1; else return 0; } in
class Solution {
public:
static bool comp( pair<int,pair<int,int> > &a, pair<int,pair<int,int> > &b )
{
if(a.first <= b.first)
return 1;
else
return 0;
}
int t1(vector<int>& nums, int target)
{
vector< pair<int,pair<int,int> > > sum_of_two;
int n=nums.size();
for(int i=0;i<n;i++)
{
for(int j=i+1;j<n;j++)
{
sum_of_two.push_back( make_pair( nums[i]+nums[j] ,make_pair(i,j) ) );
}
}
sort(sum_of_two.begin(),sum_of_two.end() ,comp );
return 1;
}
};
类解决方案{
公众:
静态bool comp(对a、对b)
{
如果(a)两个的第一和;
int n=nums.size();
对于(int i=0;i这两个比较是不同的。第一个比较没有实现严格的弱顺序,因为如果a.first==b.first
,那么comp(a,b)
和comp(b,a)
都将返回true。因为这违反了比较函数的要求,行为是未定义的
解决方法很简单:将测试更改为
if(a.first < b.first)
if(a.first
因此,当两个值相等时,它将返回false
。调用sort()
,seg故障是否确实发生?另外,应该注意的是,t1()
不返回值,但它希望返回int
seg故障发生在sort()函数的“比较”上函数实际上是一个排序函数,你的函数说任何元素都应该在其自身之前排序,这是不可能的。如果我们使用if(a.first2@vikasyadav“a未在b之前订购”和“b在a之前未排序”可以同时为真(例如,如果a==b
或者它们根本不能排序),“a在b之前排序”和“b在a之前排序”不能同时为真。
if(a.first < b.first)