4

構造体タイプのキューがあります

struct test {
   int numbers;
};

queue<test> q;

最小値を見つける方法:

q.front().numbers;

たとえば、数が5,1,3の場合、1を見つける必要があります。

4

2 に答える 2

5

整数のキューが必要なので、最も簡単な解決策は を使用することstd::deque<int>です。次にstd::min_element、キュー内の最小要素を見つけるために使用できます。

std::deque<int> q{5, 1, 3};
std::deque<int>::iterator it = std::min_element(q.begin(), q.end());
std::cout << *it << std::endl;

そうすることで、 を使用する必要がなくなりますstruct test。整数を格納しているように見えるため、これは特に当てはまります。一方、struct testより複雑な(フィールドが多い)場合は、まったく同じアプローチを使用できますが、比較関数を定義できますstruct test(このような比較関数の例については、@fljx の回答を参照してください)。

のみを使用できる場合はqueue、実行できる操作の種類が制限されます。したがって、次のようにする必要があります。

std::queue<int> q;
/* fill queue ... */
int min_value = INT_MAX;
std::size_t size = q.size();
while (size-- > 0) {
    int x = q.front();
    q.pop();
    q.push(x);
    if (x < min_value)
        min_value = x;
}
于 2012-06-19T12:04:15.787 に答える
0

ウェブ上でそれを説明するページがたくさんあります。

operator <構造を比較する方法を伝える必要があります。

struct test {
   int numbers;

    bool operator < ( const test &t ) const
    { return this->numbers < t.numbers; }
};

(私はこのコードのばかげたエラーをテストしていませんが、問題が見つかった場合は以下のリンクが役立つ場合があります)。

その後、 を使用#include <algorithm>して にアクセスしmin_element()ます。

参考文献: http://www.cplusplus.com/reference/algorithm/min_element/ http://courses.cms.caltech.edu/cs11/material/cpp/donnie/cpp-ops.html

于 2012-06-19T12:04:52.870 に答える