C++ <;算法>;排序自定义条件
好的,我试着用排序来表示项的向量,所以两个邻接项的大小是 甚至不可能像那样对使用条件进行排序 不可以。中的比较器必须满足的条件显然不是您的条件(例如,它不是不可伸缩的)。您使用的sort()方法是错误的 STL排序用于对元素列表进行排序。对于“订购”,您需要满足以下条件: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
如果是这种情况,那么您可能可以编写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);