我正在使用find()
的{{1}}方法,该方法返回迭代器。
但是我需要找到的元素的索引;例如:0,对应std::map
,依此类推。
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
}
的方法,因为300的索引是2。
对于这个简单的例子,你可能会说map(二叉树)不是一个好容器。但是,在实际代码中,我必须搜索大量元素,二叉树对此有好处。
有什么想法吗?
答案 0 :(得分:8)
如果你需要索引,那么地图可能是错误的数据类型;你需要遍历地图(在线性时间内)来找到索引,失去了对数时间搜索的好处。
使用lower_bound
算法以对数时间查找元素的排序向量可能更合适。然后你可以在begin()
迭代器中以恒定时间减去生成的随机访问迭代器。
尽管如此,如果你想使用地图:
std::cout << std::distance(aMap.begin(), it_map) << '\n';
答案 1 :(得分:5)