为什么需要对才能插入到地图中?
Why pair is required to insert into map?
虽然我不喜欢它,但发现声明一个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>
。许多其他方法,如find
、erase
、at
、count
、equal_range
、lower_bound
、upper_bound
和operator[]
key_type
。
所有标准库容器都定义了value_type
成员类型,它们的接口通常按照以下value_type
进行操作:insert
、push_back
、push_front
。新接口emplace
添加了一种构造value_type
对象的方法,就像:
value_type(std::forward<Args>(args)...)
基本上,没有为卫星数据关联容器(即地图)提供特殊的接口,它知道value_type
的特殊结构(定义,不完全已知,要pair<const key_type, mapped_type>
),除了find
和erase
和operator[]
,它们接受key_type
参数。
这可能是对标准的疏忽,或者它可能从未被认为是一个问题,因为您始终可以使用make_pair
、make_tuple
或forward_as_tuple
或emplace
来创建地图值类型。
(insert
和仅移动映射类型存在一个问题,该问题已浮出水面,并且是此最新提案的主题。
- 将一对插入地图并增加计数?
- 当我将其插入无序地图时,矢量的容量为 0
- 如何将元素插入到标准::地图的共享指针中?
- 无法插入到标准地图
- 为什么不插入地图?
- 为什么emplace_hint比插入地图慢?
- 地图插入(const_iterator提示,值)用法
- 无法将智能指针插入地图
- 插入到地图中,以对作为键并列出作为值
- 地图插入不明确
- VS 2017 错误 C2664 地图插入尝试
- 为什么通用参考概念不适用于函数指针的地图插入
- 地图插入将替换以前输入的值
- 地图插入密钥,但没有值
- 如何在CPU和内存中优化C 中的重型地图插入
- 我如何将MPL地图插入
- 地图::插入正在中断
- 我不明白地图插入上的此错误
- C++ 多重地图插入功能
- 地图插入返回错误答案的地图