为什么需要对才能插入到地图中?

Why pair is required to insert into map?

本文关键字:地图 插入 为什么      更新时间:2023-10-16

虽然我不喜欢它,但发现声明一个pair<X,Y>对象,或者调用make_pair,以便调用map::insert是不方便的。为什么insert不接受两个参数来分别指定键和值。

虽然我知道这是为了与其他 STL 容器兼容,但表现出value_type.但是find方法需要key_type这打破了这种兼容性断言。map既有key_type又有mapped_type,那么为什么map不能有:

iterator insert(const key_type&, const mapped_type&);

是的,insert使用迭代器时存在重载。但这两个论点insert本可以很好地混合在一起。

我看到的一个优点是:更少的调用堆栈使用。

编辑: 刚刚发现insert是唯一需要value_type的方法,那就是pair<X,Y>。许多其他方法,如finderaseatcountequal_rangelower_boundupper_boundoperator[]key_type

所有标准库容器都定义了value_type成员类型,它们的接口通常按照以下value_type进行操作:insertpush_backpush_front。新接口emplace添加了一种构造value_type对象的方法,就像:

value_type(std::forward<Args>(args)...)

基本上,没有为卫星数据关联容器(即地图)提供特殊的接口,它知道value_type的特殊结构(定义,不完全已知,要pair<const key_type, mapped_type>),除了finderaseoperator[],它们接受key_type参数。

这可能是对标准的疏忽,或者它可能从未被认为是一个问题,因为您始终可以使用make_pairmake_tupleforward_as_tupleemplace来创建地图值类型。

(insert和仅移动映射类型存在一个问题,该问题已浮出水面,并且是此最新提案的主题。