Вопрос:
У меня очередь из типа struct
struct test { int numbers; }; queue<test> q;
как найти минимальное значение:
q.front().numbers;
Например, если в числах 5,1,3 мне нужно найти 1.
Лучший ответ:
Поскольку вам нужна очередь целых чисел, самым простым решением является использование 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
Существует множество страниц, объясняющих это в Интернете.
Вам нужно создать 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