C ++ - 队列中的最小值

时间:2012-06-19 11:41:50

标签: c++ struct queue

我有结构类型的队列

struct test {
   int numbers;
};

queue<test> q;

如何从以下位置找到最小值:

q.front().numbers;

例如,如果数字中有5,1,3我需要找到1。

2 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分: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