Если вы можете использовать C++ 11 и выше, я предлагаю использовать any_of
алгоритм:
#include <algorithm>
if(std::any_of(intQueue.begin(), intQueue.end(), value))
{
//do some stuff here
}
Не важно, что структура данных можно было бы использовать, до тех пор, как он предлагает итераторы.
Примечание! Единственное, на что нужно обратить внимание, это желаемая сложность. Здесь вы можете столкнуться с сравнениями O (N). Однако, если основной очередь известно, что сортируются (например приоритет очереди), вы можете улучшить время выполнения, чтобы быть O (N журнал). Единственная проблема заключается в том, что (например, std::priority_queue
) не предлагает вам итераторов, и вам понадобится еще один экземпляр std::priority_queue
, чтобы поместить элементы после того, как вы поцарапаете голову, или вы сортируете свою структуру данных на месте и используете std::binary_search
, чтобы проверить, элемент есть:
#include <deque>
#include <algorithm>
// std::deque<int> intQueue;
std::sort(intQueue.begin(), intQueue.end()); // !!! this is O(N log N) !!!
if(std::binary_search(intQueue.begin(), intQueue.end(), value)) // O(log N)
{
//do some stuff here
}
Как выясняется: вы должны поддерживать отсортированный состояние после начальной сортировки (с O (журнал N) время вставки), в противном случае вы будете в конечном итоге с худшей сложности выполнения ,В частности, вам могут понадобиться элементы как состояния в порядке FIFO, чем второй подход не применим.
'intQueue' - переменная, а не тип. Вероятно, введите 'Queue'? Я бы использовал 'deque' в C++ и функцию' find'. –
Справа. intQueue - это имя переменной, используемое здесь в качестве примера. Может быть, дека лучше подходит для этого случая. Спасибо за ваш комментарий. Я займусь этим. – trademark
Исправление. Я имел в виду 'std :: find'. deque не имеет функции поиска. –