What is the most effective way to get the index of an iterator of an std::vector?解释了如何为std::vector
或std::list
执行此操作,但std::map
怎么办?
答案 0 :(得分:2)
最简单的方法是使用std::distance
函数:
auto index = std::distance(myMap.begin(), myMapItr);
然而,这在O(n)时间内运行,这对于大型地图来说效率很低。
如果需要将迭代器的索引确定为映射或其他有序集合,则可能需要搜索包含order statistic tree的库,这是一个支持高效的修改后的二进制搜索树(O( 1)或O(log n))时间查找树中特定值的索引。
或者,如果您手动迭代树,则可以在迭代器旁边放置一个计数器,每次从一个元素遍历到下一个元素时,它都会递增。这给O(1)时间查找迭代器的索引,但不是完全通用的。
希望这有帮助!
答案 1 :(得分:-1)
试试这个:
int IndexOf(Type *t)
{
Type** data = vector.data();
int index = 0;
while(*data++ != t)
{
index ++;
}
return index ;
}