<algorithm>排序自定义条件</algorithm>

时间:2011-02-27 19:05:35

标签: c++ sorting stl-algorithm

好的,所以我尝试使用sort来计算项目的向量,因此两个adjecant项目的大小是&lt; = 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); 

我做错了什么,或者甚至不可能使用这样的条件进行排序?

3 个答案:

答案 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用于排序元素列表。对于“订购”,您需要满足以下条件:

  1. 如果检查(A,B)==假和A!= B,则检查(B,A)返回true。
  2. 如果检查(A,B)== false并检查(B,C)== false且A,B,C是不同的,则检查(A,C)返回false。
  3. 对于您可以使用STL的sort()的一个好主意是,给定您的项目列表S以及您希望项目所在的顺序:

    1. 如果S中项目的顺序发生变化,则输出顺序应保持不变。
    2. 输出是唯一的。
    3. 输出顺序中的所有项目都有一些strict partial order关系。
    4. 如果是这种情况,那么您可以编写检查功能以便为您工作:)