C ++ - 选择最大“n”值

时间:2012-07-22 21:01:32

标签: c++ algorithm vector max

  

可能重复:
  Selecting the maximum “n” values

如果我们有以下代码:

    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; }

在您应用criterionFunction()后,您建议使用哪种方法来检索最大三个值

感谢。

2 个答案:

答案 0 :(得分: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中的前三个内容应该是最好的三个。

答案 1 :(得分:0)

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

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

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

一切都由标准库提供,您只需提供比较功能

bool operator<(const Features& x, const Features& y)
{
    return criterionFunction(x) < criterionFunction(y);
}