Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/139.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用比较器函数[c+;+;]时出现问题_C++_Comparator - Fatal编程技术网

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)