What is the most effective way to get the index of an iterator of an std::vector?說明如何做std::vector
或std::list
但std::map
呢?如何用std :: map獲取雙向迭代器的索引?
0
A
回答
2
要做到這一點是使用了std::distance
功能最徹底的方法:
auto index = std::distance(myMap.begin(), myMapItr);
然而,這種運行在O(n)的時間,這是低效的大地圖。
如果您需要確定迭代器的索引到映射或其他有序集合中,您可能需要搜索包含order statistic tree的庫,該庫是一種支持高效(O(1)或O(log n))查找樹中特定值的索引。
或者,如果您手動迭代樹,您可以只保留一個計數器,它與您每次從一個元素遍歷到下一個時遍歷的迭代器並排放置。這給出了迭代器索引的O(1)時間查詢,但並不完全一般。
希望這會有所幫助!
-1
試試這個:
int IndexOf(Type *t)
{
Type** data = vector.data();
int index = 0;
while(*data++ != t)
{
index ++;
}
return index ;
}
+0
-1,因爲它獲取矢量中_value_的索引,而不是地圖中迭代器(位置)的等效索引。 –
相關問題
- 1. 使用迭代器獲取向量的索引
- 2. std :: deque:如何獲得指向指定索引處元素的迭代器?
- 3. 如何獲取FOREACH迭代的索引
- 4. 如何訪問std :: vector迭代器中的std :: map屬性?
- 5. 雙向迭代器Next
- 6. 獲取迭代器引用的指向STL容器的指針?
- 7. 清理雙向迭代器代碼
- 8. 迭代器指向哪個索引
- 9. 無法迭代POCO的std :: map ::任何
- 10. std :: map迭代器是如何工作的?
- 11. 通過迭代器獲取集合元素的「索引」
- 12. 無法設置std :: pair std :: map的迭代器
- 13. 如何在std :: map類中定義一個迭代器
- 14. 如何使用量角器+角獲得迭代器索引/鍵?
- 15. JQuery Map獲取索引
- 16. map/set迭代器在std :: map中不可增量
- 17. 迭代std :: map的更好方法
- 18. SSRS - 獲取當前tablix迭代索引
- 19. 的std :: for_each的相當於是不取消引用迭代器
- 20. 使用std :: remove_reference獲取STL容器的元素迭代器
- 21. 如何用`std :: set`中的反向迭代器擦除元素?
- 22. 索引負向索引的std ::向量
- 23. 如何在std :: map中獲取指向一對的指針
- 24. 獲取R中迭代器的索引(與foreach並行)
- 25. openMp:並行化std :: map迭代
- 26. 如何在迭代列表中獲取* .ftl中的索引
- 27. 如何在NSEnumerator迭代中獲取當前對象的索引?
- 28. 索引變量迭代器
- 29. C++ map/set迭代器不可取消
- 30. 向量,迭代器和std :: find
這就是爲什麼我喜歡這個網站。 – user2512322