2013-06-22 43 views

回答

2

要做到這一點是使用了std::distance功能最徹底的方法:

auto index = std::distance(myMap.begin(), myMapItr); 

然而,這種運行在O(n)的時間,這是低效的大地圖。

如果您需要確定迭代器的索引到映射或其他有序集合中,您可能需要搜索包含order statistic tree的庫,該庫是一種支持高效(O(1)或O(log n))查找樹中特定值的索引。

或者,如果您手動迭代樹,您可以只保留一個計數器,它與您每次從一個元素遍歷到下一個時遍歷的迭代器並排放置。這給出了迭代器索引的O(1)時間查詢,但並不完全一般。

希望這會有所幫助!

+0

這就是爲什麼我喜歡這個網站。 – user2512322

-1

試試這個:

int IndexOf(Type *t) 
{ 
    Type** data = vector.data(); 

    int index = 0; 

    while(*data++ != t) 
    { 
     index ++; 
    } 

    return index ; 
} 
+0

-1,因爲它獲取矢量中_value_的索引,而不是地圖中迭代器(位置)的等效索引。 –