如何在std::deque中获得元素的索引?
How do I get index of element in std::deque
我有一个deque和一个属于这个deque的对象。
std::deque<Item> items;
// full deque with objects
// ...
Item &item = items[5];
现在我想要得到deque中那个元素的索引:
size_t index = &item - &*m_items.begin();
我期望index等于5,但是我得到了比deque大的数
当然,我可以遍历deque来查找我的对象,但是有可能得到O(1)中元素的索引吗?
不能根据地址计算std::deque<T>
中元素的索引,因为std::deque<T>
中的元素不是存储在连续内存中。最好的情况是,您可以使用迭代器并从位置中减去begin()
迭代器。但是,请注意,向std::deque<T>
添加或删除元素会使所有迭代器无效,即使指向对象的指针或引用不会无效。
这取决于没有引用失效,但是您可以使用std::find_if
通过地址查找元素,然后使用std::distance
获得索引。
Item &item = items[5];
Item* p = &item;
auto it = std::find_if(items.begin(),
items.end(),
[p](const Item& i) {return p == &i;});
auto idx = std::distance(items.begin(), it);
更简单的选择是保留迭代器而不是引用。
相关文章:
- 在对向量中查找元素的索引
- 当该数组的索引中没有元素时,指针指向什么?
- 如何在 STL 函数中找到传递给谓词的元素的索引?
- 如何在C++中递归地找到max元素的索引?
- 编译器(Visual C++)如何优化按索引访问矢量元素?
- 保持排序的数据结构,允许log N插入时间,并且可以返回我在log N中查找的元素的索引
- 使用推力根据索引更改某些元素的值
- 为什么 min_element() 返回最小元素的索引,而不是迭代器?
- CPtrList - 如何获取元素的索引?
- 获取结构 c++ 中元素的索引
- C++ STL 数据结构常时按索引推送/弹出/随机访问,并具有指向元素的可靠指针
- 矢量指针索引处的读取元素
- C++函数返回两个 char 数组的相同索引元素
- 特征:类似 numpy 的元素索引
- 如何在另一个数组中找到一个未排序数组的不同元素索引?
- C 无法使用嵌套环将数组的元素索引
- Opencv Mat的元素索引产生垃圾
- 在c++中,当元组的元素索引在运行时已知时,是否有可能获得该元素的类型?
- 按内容访问QVector元素索引
- C++ 矢量元素索引