首页 > 解决方案 > 通过值获取 std::queue 中元素的索引

问题描述

std::queue有没有一种简单的方法可以通过 C++ 中的值来获取元素在 a 中的位置?

例如:

std::queue<int> numbers;

numbers.push(7);
numners.push(4);
numbers.push(11);

int position = numbers.getPosition(4); //should be 1

标签: c++stlqueue

解决方案


如果您想获取元素的索引,您可能应该考虑使用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


推荐阅读