Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/134.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.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++_Sorting_Stl - Fatal编程技术网

C++ 给定的条件如何维持发生顺序

C++ 给定的条件如何维持发生顺序,c++,sorting,stl,C++,Sorting,Stl,我遇到了一个Geeksforgeks,上面写着:使用内置的排序函数重新排列正数和负数,使所有负整数出现在所有正整数之前,应保持出现顺序 sort()的comparator函数被修改以实现这一点 bool comp(int a, int b) { // This is to maintain order if ((a >= 0 && b >= 0) || (a < 0 && b < 0)) return fal

我遇到了一个Geeksforgeks,上面写着:使用内置的排序函数重新排列正数和负数,使所有负整数出现在所有正整数之前,应保持出现顺序

sort()的comparator函数被修改以实现这一点

bool comp(int a, int b)
{
    // This is to maintain order
    if ((a >= 0 && b >= 0) || (a < 0 && b < 0))
        return false;

    // Swapping is must
    if ((a >= 0) && (b < 0))
        return false;
    return true;
}
bool comp(内部a、内部b)
{
//这是为了维持秩序
如果((a>=0&&b>=0)| |(a<0&&b<0))
返回false;
//交换是必须的
如果((a>=0)和&(b<0))
返回false;
返回true;
}
但是,这个区块如何维持秩序:

if ((a >= 0 && b >= 0) || (a < 0 && b < 0))
    return false;
if((a>=0&&b>=0)| |(a<0&&b<0))
返回false;

这似乎是原文

工作原理:std::sort根据比较器重新排列所有内容。此比较器基于“所有负数都完全相等。所有正数都完全相等。负数小于正数。”

如果你按照这些规则排序,你会得到所有的负数,然后是所有的正数。比较器本身不会打乱它们的顺序,只看它们是大于还是小于零。(而且数据集没有任何零。)

出了什么问题:

1) 比较函数无法正确处理0。它给出了错误的答案,更糟糕的是,它给出的答案违反了严格的弱顺序。(见下文)

2) 排序不是一种稳定的排序。它不能保证维持秩序。他们在一组数据上很幸运。如果他们使用了std::stable_sort和一个正确的比较函数,那么它将是一个满足要求的“内置函数”。但是仅仅使用比较函数并不能使算法稳定。查看或仅查看屏幕上文档顶部附近的内容

3) 对于一个简单的O(n)问题,他们会想出一个复杂度为O(n logn)的解决方案。因此,除了在多个点上出错之外,它没有充分的理由是低效的

也许他们应该考虑是否允许我们排除数据中的零


这里是严格弱排序的定义(也有一些程序员的链接)

对于S中的所有x,x

注意comp(0,anywhere)返回false,因此1<0除了明显错误之外,还容易破坏传递性。

这似乎是原文

工作原理:std::sort根据比较器重新排列所有内容。此比较器基于“所有负数都完全相等。所有正数都完全相等。负数小于正数。”

如果你按照这些规则排序,你会得到所有的负数,然后是所有的正数。比较器本身不会打乱它们的顺序,只看它们是大于还是小于零。(而且数据集没有任何零。)

出了什么问题:

1) 比较函数无法正确处理0。它给出了错误的答案,更糟糕的是,它给出的答案违反了严格的弱顺序。(见下文)

2) 排序不是一种稳定的排序。它不能保证维持秩序。他们在一组数据上很幸运。如果他们使用了std::stable_sort和一个正确的比较函数,那么它将是一个满足要求的“内置函数”。但是仅仅使用比较函数并不能使算法稳定。查看或仅查看屏幕上文档顶部附近的内容

3) 对于一个简单的O(n)问题,他们会想出一个复杂度为O(n logn)的解决方案。因此,除了在多个点上出错之外,它没有充分的理由是低效的

也许他们应该考虑是否允许我们排除数据中的零


这里是严格弱排序的定义(也有一些程序员的链接)

对于S中的所有x,x

请注意,comp(0,anything)返回false,因此1<0很容易破坏传递性,而且显然是错误的。

comp函数破坏了

if ((a >= 0 && b >= 0) || (a < 0 && b < 0))
    return false;
if((a>=0&&b>=0)| |(a<0&&b<0))
返回false;
如果a为0且b为+ve,则a小于b,但返回false,而不是true

试一试

bool comp(内部a、内部b)
{
常数int first=((a<0)?-1:(a==0)?0:1);
常数int秒=((b<0)?-1:(b==0)?0:1);
返回(第一次<第二次);
}

并将其插入std::stable_sort

中,comp函数会打破严格的弱排序

if ((a >= 0 && b >= 0) || (a < 0 && b < 0))
    return false;
if((a>=0&&b>=0)| |(a<0&&b<0))
返回false;
如果a为0且b为+ve,则a小于b,但返回false,而不是true

试一试

bool comp(内部a、内部b)
{
常数int first=((a<0)?-1:(a==0)?0:1);
常数int秒=((b<0)?-1:(b==0)?0:1);
返回(第一次<第二次);
}
并将其插入std::stable\u排序

但是,这个区块如何维持秩序:

命令不是
bool comp(int a, int b)
{
   const int first = ((a < 0) ? -1 : (a == 0) ? 0 : 1);
   const int second = ((b < 0) ? -1 : (b == 0) ? 0 : 1);

   return (first < second);
}