<算法>排序自定义条件

好的,所以我尝试使用sort来计算项目的向量,因此两个adjecant项目的大小是< = 2d。 所以这是我的尝试:
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); 
我做错了什么,或者甚至不可能使用这样的条件进行排序?     
已邀请:
  使用这样的条件甚至不可能排序? 不可以.
sort
中的比较器必须满足严格弱顺序的标准,而这种标准明显不符合(例如,它不是反射性的)。     
在O(N log N)时间内无法解决此问题。我不知道它是否是NP难的,但它是非常重要的。我认为可以说,解决代码中表达的问题的程序需要指数时间。有这样的程序:我认为它可以摆弄并插入线性优化器。 没有标准的库函数可以让您获得通用解决方案的大部分功能。没有比O(N log N)慢的标准库函数,并且没有解决可能难以解决的问题。 例如,如果每个
size
等于
10 * d
,这个问题就难以处理。     
您使用的sort()方法错误。 STL排序用于排序元素列表。对于“订购”,您需要满足以下条件: 如果检查(A,B)==假和A!= B,则检查(B,A)返回true。 如果检查(A,B)==假并检查(B,C)==假并且A,B,C是不同的,则检查(A,C)返回false。 对于您可以使用STL的sort()的一个好主意,给定您的项目列表S和您希望项目所在的顺序: 如果S中项目的顺序发生变化,则输出顺序应保持不变。 输出是唯一的。 输出顺序中的所有项都有一些严格的偏序关系。 如果是这种情况,那么你可能会编写检查功能为你工作:)     

要回复问题请先登录注册