簡體   English   中英

如何在std :: deque中獲取元素索引

[英]How do I get index of element in std::deque

我有一個雙端隊列,我有一個屬於雙端隊列的對象。

std::deque<Item> items;
// full deque with objects
// ...
Item &item = items[5];

現在我想在deque中獲取該元素的索引:

size_t index = &item - &*m_items.begin();

我希望索引等於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);

更容易的選擇是保持迭代器而不是引用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM