繁体   English   中英

在std :: map中打印迭代器的索引

[英]Printing the index of an iterator in std::map

我正在使用std::mapfind()方法,它返回一个迭代器
但是我需要找到元素的索引 ; 例如: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;

文档在这里

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM