[英]Printing the index of an iterator in std::map
我正在使用std::map
的find()
方法,它返回一個迭代器 。
但是我需要找到元素的索引 ; 例如:0,對應於std::map::begin()
,依此類推。
#include <map>
#include <utility>
#include <iostream>
int main()
{
std::map< int, int > aMap;
aMap.insert( std::make_pair(100, 50) );
aMap.insert( std::make_pair(200, 40) );
aMap.insert( std::make_pair(300, 60) );
std::map< int, int >::iterator it_map = aMap.find(300);
if (it_map != aMap.end())
std::cout << it_map << "\n"; // error
}
這不編譯,我知道原因。 但是,我需要一種方法來打印2
因為300的索引是2。
對於這個簡單的例子,你可能會說map(二叉樹)不是一個好容器。 但是,在實際代碼中,我必須搜索大量元素,二叉樹對此有好處。
任何的想法?
如果你需要索引,那么地圖可能是錯誤的數據類型; 你需要遍歷地圖(在線性時間內)來找到索引,失去了對數時間搜索的好處。
也許使用lower_bound
算法以對數時間查找元素的排序向量可能更合適。 然后,您可以在常量時間從begin()
迭代器中減去生成的隨機訪問迭代器。
不過,如果你想使用地圖:
std::cout << std::distance(aMap.begin(), it_map) << '\n';
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.