0

可能重复:
选择最大“n”值

如果我们有以下代码:

    struct Features{ int F1, F2, F3, F4; };

    int criterionFunction(Features const& features) {
        return
            -2*features.F1*features.F2
            +3*features.F1
            +5*features.F2
            -2*features.F1*features.F2*features.F3
            +7*features.F3
            +4*features.F4
            -2*features.F1*features.F2*features.F3*features.F4; }

您建议使用什么方法可以在应用 ti后检索最大三个值criterionFunction()

谢谢。

4

2 回答 2

3

我认为您可以使用std::partial_sort它。例如:

 #include <algorithm>

 bool criterionGreater(Feature const& left, Feature const& right) { return criterionFunction(left) > criterionFunction(right); }

 std::partial_sort(yourVector.begin(), yourVector.begin() + 3, yourVector.end(), criterionGreater);

那么 yourVector 中的前三件事应该是三个最大的。

于 2012-07-22T21:05:32.907 回答
0

我建议将值存储在 a 中std::priority_queue,以便可以直接使用前三个元素。

如果元素已经存储,您仍然可以使用优先级队列。遍历序列,如果x是当前元素

  • 如果优先级队列的元素少于 3 个,则添加x到队列中
  • 否则,如果队列的底部元素的值大于x,则不执行任何操作
  • 否则将元素添加到队列中并删除底部的元素

一切都由标准库提供,你只需要提供你的比较函数

bool operator<(const Features& x, const Features& y)
{
    return criterionFunction(x) < criterionFunction(y);
}
于 2012-07-22T21:07:12.137 回答