为什么std :: map索引一个?

时间:2018-03-20 18:05:04

标签: c++11

我正在尝试获取地图中键的索引。我用距离 为了这。为什么结果总是关闭?我在期待“啤酒” index为2但答案是1。

#include <map>
#include <iostream>

int main(){

  std::map<std::string, int> my_map;

  my_map.insert(std::make_pair("apple", 0));
  my_map.insert(std::make_pair("a", 0));
  my_map.insert(std::make_pair("ale", 0));
  my_map.insert(std::make_pair("aple", 0));
  my_map.insert(std::make_pair("aplle", 0));

  std::cout << "map size = " << my_map.size() << std::endl;
  int index  = distance(my_map.begin(), my_map.find("ale"));
  std::cout << "index = " << index << std::endl;

  index  = distance(my_map.begin(), my_map.find("a"));
  std::cout << "index = " << index << std::endl;
}

2 个答案:

答案 0 :(得分:3)

按照map在地图中存储的顺序打印。然后,std::distance的返回值将有意义。

for ( auto& item : my_map )
{
   std::cout << item.first << " ";
}
std::cout << std::endl;

输出:

a ale aple aplle apple

答案 1 :(得分:1)

std::map关联容器)不会像std::vector序列容器)那样维护&#39; insert order`中的元素。它以任何排序顺序维护它们,使地图查找更有效。