在std::map中打印迭代器的索引
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';
使用std::distance
,如下所示:
std::cout << std::distance(std::begin(aMap),it_map) << endl;
此处的文档
相关文章:
- 了解运算符重载和迭代器,为什么它会打印出"wrhrwwr"?
- 为什么这个程序没有打印返回的迭代器的正确第二个元素?
- 从矢量不需要的值进行迭代器打印
- 使用迭代器打印矢量元素
- 通过迭代器打印出地图的值
- C++ Map erase(),迭代器打印 erased 元素
- 如何修复使用矢量和迭代器打印值的错误
- 打印一个列表给出错误,指出迭代器不可递减
- 如何使用迭代器在列表中打印类对象
- 似乎无法使用<VERTEX>迭代器在 for 循环中打印列表顶点?C++
- 如何在不使用迭代器的情况下在 C++ 中打印地图
- 为什么 g++ 需要 -fallowive 标志来打印 c++ 中的迭代器值
- 如何打印迭代器类型列表<pair<int,int>>::iterator itrator it指向的元素
- 我可以用cout而不是迭代器循环打印STL映射吗?
- C++流和迭代器:为什么它只打印一次
- 迭代器打印两个值,一个是文本,另一个是指针
- 矢量迭代器 -> 打印序列(缺少参数)
- 使用c++迭代器打印vector对象
- 使用迭代器打印multimap
- 在 2D 矢量上使用迭代器打印值