C++11 为什么std::map索引被关闭了1?

C++11 为什么std::map索引被关闭了1?,c++11,C++11,我正在尝试获取地图中键的索引。我使用距离 为了这个。为什么结果总是一次性的?我在等“啤酒” 索引为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));

我正在尝试获取地图中键的索引。我使用距离 为了这个。为什么结果总是一次性的?我在等“啤酒” 索引为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;
}
#包括
#包括
int main(){
映射我的地图;
my_map.insert(std::make_pair(“苹果”,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
std::map
(关联容器)不像
std::vector
(序列容器)那样维护“插入顺序”中的元素。它以使映射查找高效的任何排序顺序来维护它们。

std::map
(关联容器)不以“插入顺序”维护元素,如
std::vector
(序列容器)。它以使地图查找高效的任何排序顺序维护元素。

按地图中存储的顺序打印地图的键。
std::distance
的返回值将有意义

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

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

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

为什么你期望“ale”有2个索引?为什么你期望“ale”有2个索引?更准确地说,它按排序顺序向它们返回迭代器。内部表示的效率是无关的。更准确地说,它按排序顺序向它们返回迭代器。内部表示的效率是无关的。