Если вы хотите получить индекс элемента, вам, вероятно, следует рассмотреть возможность использования контейнера std::deque
вместо std::queue
контейнера адаптера , как уже предлагалось в этот другой ответ .
Если вы по-прежнему хотите использовать контейнерный адаптер std::queue
по какой-либо другой причине, вы должны знать, что он обеспечивает доступк базовому контейнеру через защищенный элемент данных c
.
Вы можете получить из std::queue
для доступа к базовому контейнеру и использовать std::find()
шаблон функции для поиска элемента в этом контейнере с таким значением.Затем просто верните позицию этого элемента, используя std::distance()
.
#include <algorithm>
#include <queue>
template<typename T>
class Queue: std::queue<T> {
public:
auto getPosition(const T& val) const {
auto it = std::find(this->c.begin(), this->c.end(), val);
return std::distance(this->c.begin(), it);
}
// ...
};
Если элемент не найден, индекс будет соответствовать индексу, возвращенному size()
функция-член.
Если есть дубликаты, это решение на основе std::find()
вернет позицию первого, то есть первого найденного элемента с запрошенным значением val
.