我有一个双端队列,并且有一个属于该双端队列的对象。
std::deque<Item> items;
// full deque with objects
// ...
Item &item = items[5];
现在,我想获取双端队列中该元素的索引:
size_t index = &item - &*m_items.begin();
我希望索引等于5,但是我得到的值比双端队列的大小大。
当然,我可以遍历双端队列以查找对象,但是有可能在O(1)中获取元素的索引吗?
最佳答案
这取决于没有引用无效,但是您可以使用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);
比较容易的选择是保留迭代器而不是引用。