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

を適用した後、最大の THREE 値を取得するために使用できる方法を教えてください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 内の最初の 3 つのものが、最も優れた 3 つになるはずです。

于 2012-07-22T21:05:32.907 に答える
0

std::priority_queue上位 3 つの要素が直接利用できるように、値を a に格納することをお勧めします。

要素が既に格納されている場合でも、優先キューを使用できます。シーケンスを反復し、x現在の要素である場合

  • 優先キューの要素が 3 つ未満の場合はx、キューに追加します
  • キューの一番下の要素の値が より大きい場合はx、何もしません。
  • それ以外の場合は、要素をキューに追加し、一番下の要素を削除します

すべてが標準ライブラリによって提供されます。比較関数を提供するだけです

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