好的,所以我尝试使用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);
我做错了什么,或者甚至不可能使用这样的条件进行排序?
答案 0 :(得分:5)
甚至不可能使用这样的条件进行排序?
没有。 sort
中的比较符必须满足strict weak ordering的标准,而{{3}}显然不符合标准(例如,它不反射)。
答案 1 :(得分:2)
在O(N log N)时间内无法解决此问题。我不知道它是否是NP难的,但它是非常重要的。我认为可以说,解决代码中表达的问题的程序需要指数时间。有这样的程序:我认为它可以摆弄并插入线性优化器。
没有标准的库函数可以让您获得通用解决方案的大部分功能。没有比O(N log N)慢的标准库函数,也没有解决可能难以处理的问题。
如果每个size
等于10 * d
,则此问题难以处理。
答案 2 :(得分:0)
您使用的sort()方法错误。
STL sort用于排序元素列表。对于“订购”,您需要满足以下条件:
对于您可以使用STL的sort()的一个好主意是,给定您的项目列表S以及您希望项目所在的顺序:
如果是这种情况,那么您可以编写检查功能以便为您工作:)