С++ – Минимальное значение в очереди

Вопрос: У меня очередь из типа struct struct test { int numbers; }; queue q; как найти минимальное значение: q.front().numbers; Например, если в числах 5,1,3 мне нужно найти 1. Лучший ответ: Поскольку вам нужна очередь целых чисел, самым простым решением является использование std::deque. Затем вы можете использовать std::min_element чтобы найти минимальный элемент в очереди: std::deque

Вопрос:

У меня очередь из типа 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

Оцените статью
Добавить комментарий