如果我们有以下代码:
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()
后,您建议使用哪种方法来检索最大三个值?
感谢。
答案 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
是当前元素
x
添加到队列x
,则不执行任何操作一切都由标准库提供,您只需提供比较功能
bool operator<(const Features& x, const Features& y)
{
return criterionFunction(x) < criterionFunction(y);
}