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 Algorithm - Fatal编程技术网

C++ <;算法>;排序自定义条件

C++ <;算法>;排序自定义条件,c++,sorting,stl-algorithm,C++,Sorting,Stl Algorithm,好的,我试着用排序来表示项的向量,所以两个邻接项的大小是 甚至不可能像那样对使用条件进行排序 不可以。中的比较器必须满足的条件显然不是您的条件(例如,它不是不可伸缩的)。您使用的sort()方法是错误的 STL排序用于对元素列表进行排序。对于“订购”,您需要满足以下条件: 如果检查(A,B)=false和A!=B、 然后check(B,A)返回true 如果check(A,B)=false和check(B,C)=false以及A,B,C是不同的,那么check(A,C)返回false 对于使用S

好的,我试着用排序来表示项的向量,所以两个邻接项的大小是 甚至不可能像那样对使用条件进行排序

不可以。中的比较器必须满足的条件显然不是您的条件(例如,它不是不可伸缩的)。

您使用的sort()方法是错误的

STL排序用于对元素列表进行排序。对于“订购”,您需要满足以下条件:

  • 如果检查(A,B)=false和A!=B、 然后check(B,A)返回true
  • 如果check(A,B)=false和check(B,C)=false以及A,B,C是不同的,那么check(A,C)返回false
  • 对于使用STL的sort()的位置,一个好主意是,给定您的项目列表以及您希望项目的顺序:

  • 如果S中项目的顺序发生变化,则输出顺序应保持不变
  • 输出是唯一的
  • 输出顺序中的所有项都具有某种关系,即一种关系

  • 如果是这种情况,那么您可能可以编写check函数来为您工作:)

    这个问题无法在O(N log N)时间内解决。我不知道这是否是NP难的,但它非常重要。我认为可以肯定地说,一个程序解决代码中表达的问题需要指数时间。有这样的程序:我认为它可以被摆弄并插入线性优化器

    没有一个标准的库函数可以帮助您找到一个通用的解决方案。没有比O(nlogn)慢的标准库函数,也没有一个能解决棘手的问题


    例如,如果每个
    大小
    等于
    10*d

    1,则此问题很难解决。您得到了什么错误(如果有?)2。排序函数通常有整数返回值,因为它们至少需要三个条件:AB,A==B第二个条件实际上应该是:if(check(A,B)=true,check(B,C)==true,然后check(A,C)==true。(这是传递性要求;条件一是不对称要求)
    struct item{
        long number;
        long size;
    };
    
    // d is global variable.
    bool check(const item& x, const item& y)
    {
        return ((x.size + y.size) <= (2 * d));
    }
    
    // Items is a vector of item.
    sort(items.begin(), items.end(), check);