我有一个双端队列,并且有一个属于该双端队列的对象。

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);

比较容易的选择是保留迭代器而不是引用。

08-27 22:11
查看更多