获取 std::vector 的迭代器索引的最有效方法是什么?解释了如何做std::vector
或者std::list
但是呢std::map
?
问问题
657 次
2 回答
2
最干净的方法是使用以下std::distance
功能:
auto index = std::distance(myMap.begin(), myMapItr);
但是,这在 O(n) 时间内运行,这对于大型地图来说效率很低。
如果您需要确定迭代器在映射或其他有序集合中的索引,您可能需要搜索包含顺序统计树的库,这是一种支持高效 (O(1) 或 O( log n)) 树中特定值的索引的时间查找。
或者,如果您在树上手动迭代,您可以只在迭代器旁边放置一个计数器,每次从一个元素遍历到下一个元素时,您都会递增该计数器。这给出了迭代器索引的 O(1) 时间查找,但并不完全通用。
希望这可以帮助!
于 2013-06-22T19:21:55.223 回答
-1
尝试这个:
int IndexOf(Type *t)
{
Type** data = vector.data();
int index = 0;
while(*data++ != t)
{
index ++;
}
return index ;
}
于 2013-07-02T17:33:36.920 回答