对于std::map
,在迭代时,我是否可以始终信任begin()
根据类型的比较运算符返回具有最小键的元素?
换句话说......
std::map<Key, SomeClass>::iterator smallestKeyIt = someMap.begin();
会在地图上用最小的键给我这对吗?
这是为std::map
保证的顺序还是我能以某种方式配置它?我的理解是,在执行添加和删除元素等操作时,底层树结构会保持有序。
答案 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
。)
template<
class Key,
class T,
class Compare = std::less<Key>,
class Allocator = std::allocator<std::pair<const Key, T> >
> class map;
std :: map是一个包含键值的有序关联容器 配有唯一键。使用比较对键进行排序 功能比较。搜索,删除和插入操作具有 对数复杂度。地图通常以cppreference实现。