std :: map的排序

时间:2015-09-09 05:42:21

标签: c++ iterator stdmap

对于std::map,在迭代时,我是否可以始终信任begin()根据类型的比较运算符返回具有最小键的元素?

换句话说......

std::map<Key, SomeClass>::iterator smallestKeyIt = someMap.begin();会在地图上用最小的键给我这对吗?

这是为std::map保证的顺序还是我能以某种方式配置它?我的理解是,在执行添加和删除元素等操作时,底层树结构会保持有序。

2 个答案:

答案 0 :(得分:3)

std::map定义为:

template<
    class Key,
    class T,
    class Compare = std::less<Key>,
    class Allocator = std::allocator<std::pair<const Key, T> >
> class map;

您可以使用专门的Compare来配置map的条目的排序方式。例如,如果您使用:

std::map<int, double, std::greater<int>> myMap;

然后,myMap中的第一个条目将具有最大的密钥。

答案 1 :(得分:3)

  

我总是可以信任begin()根据类型的比较运算符返回具有最小键的元素吗?

  

这是为std :: map保证的顺序还是我能以某种方式配置它?

是。您可以通过指定比较器来配置比较行为。 (默认值为std::less。)

来自turorial from DigitalOcean

template<
    class Key,
    class T,
    class Compare = std::less<Key>,
    class Allocator = std::allocator<std::pair<const Key, T> >
> class map;
  

std :: map是一个包含键值的有序关联容器   配有唯一键。使用比较对键进行排序   功能比较。搜索,删除和插入操作具有   对数复杂度。地图通常以cppreference实现。