c – 为什么需要将对插入地图?

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

虽然我理解它是为了与其他STL容器兼容,但它展示了value_type.但是find方法采用key_type来打破这种兼容性断言. map既有key_type又有mapped_type,所以为什么cant map有:

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

是的,插入迭代器有重载.但是这个两个参数的插入可能混合得很好.

我看到的一个优点是:减少了调用堆栈的使用.

编辑:
刚刚发现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的特殊结构(已定义,并非完全众所周知,bepair< const key_type,mapped_type>),查找和擦除以及带有key_type参数的operator []除外.

它可能是对标准的疏忽,或者它从未被认为是一个问题,因为你总是可以使用make_pair,make_tuple或forward_as_tuple或emplace来创建地图值类型.

(插入和仅移动映射类型有一个问题,它已浮出水面并且是this recent proposal主题.)

相关文章

/** C+⬑ * 默认成员函数 原来C++类中,有6个默认成员函数: 构造函数 析构函数 拷贝...
#pragma once // 1. 设计一个不能被拷贝的类/* 解析:拷贝只会放生在两个场景中:拷贝构造函数以及赋值运...
C类型转换 C语言:显式和隐式类型转换 隐式类型转化:编译器在编译阶段自动进行,能转就转,不能转就编译...
//异常的概念/*抛出异常后必须要捕获,否则终止程序(到最外层后会交给main管理,main的行为就是终止) try...
#pragma once /*Smart pointer 智能指针;灵巧指针 智能指针三大件//1.RAII//2.像指针一样使用//3.拷贝问...
目录&lt;future&gt;future模板类成员函数:promise类promise的使用例程:packaged_task模板类例程...