gpt4 book ai didi

c++ - 为什么需要配对才能插入 map ?

转载 作者:可可西里 更新时间:2023-11-01 18:35:52 24 4
gpt4 key购买 nike

虽然我不讨厌,但是觉得不方便声明一个pair<X,Y>对象,或调用 make_pair , 为了打电话 map::insert .为什么 insert不接受两个参数,而是分别指定 Key 和 Value。

虽然我理解它是为了与其他 STL 容器兼容,但显示 value_type .但是find方法需要 key_type这打破了这种兼容性断言。 map兼有key_typemapped_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_boundoperator[]key_type .

最佳答案

所有标准库容器都定义了一个 value_type成员类型,它们的接口(interface)通常根据这个 value_type 操作: insert , push_back , push_front .新界面emplace添加一种构建 value_type 的方法对象好像是:

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

基本上,没有为意识到 value_type 的特殊结构的卫星数据关联容器(即 map )提供特殊接口(interface)。 (它被定义为 pair<const key_type, mapped_type> ,但并不完全为人所知),但 find 除外。和 eraseoperator[] , 这需要 key_type参数。

这可能是对标准的疏忽,或者从来没有被认为是问题,因为您始终可以使用 make_pair , make_tupleforward_as_tuple , 或 emplace , 创建映射值类型。

(insert 和仅移动映射类型存在一个问题,该类型已浮出水面并成为 this recent proposal 的主题。)

关于c++ - 为什么需要配对才能插入 map ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21235043/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com