c++ - 通过值获取 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
解决方案
如果您想获取元素的索引,您可能应该考虑使用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
。
推荐阅读
- javascript - 避免在 HTML 元素上重复,React
- reactjs - next/image 部署后不从外部 URL 加载图像
- javascript - 错误:目标容器不是 DOM 元素 BASIC REACTJS
- android - Android Studio:错误的 Lint 警告在高 min SDK 时强制使用“Compat”类 (25)
- vue.js - 在 vuetify 数据表中搜索没有特殊字符
- javascript - Javascript:结束时自动滚动制作反向动画
- c++ - std::initializer_list 用于 C++11 文字运算符上的参数列表
- .net-core - Microsoft.EntityFrameworkCore 异步不起作用
- reactjs - ReactJS MemoryRouter - 获取当前 URL
- java - 如何在创建时以编程方式在相对布局中设置背景图像?