为什么 std::map::insert 不能接受键和值而不是 std::p air?
Why can't std::map::insert take a key and a value rather than an std::pair?
std::map具有成员函数
template <class P> pair<iterator,bool> insert (P&& val);
我们使用,例如:
my_map.insert(std::make_pair(k, v));
问题是,为什么没有insert()
的变体,它只接受一个密钥和一个值,即
pair<iterator,bool> insert (K&& key, V&& value);
(K和V当然是地图的模板参数),我们会使用,例如:
my_map.insert(k, v);
在我看来,这样做完全合理。
这是在C++11中添加的,所有容器的emplace
成员,对于map
具有签名
template< class... Args >
std::pair<iterator,bool> emplace( Args&&... args );
如果您正在寻找更明显的语法,您可以使用键和值作为单独的实体执行相同的插入,如下所示:
my_map[k] = v;
诚然,这是两项独立的行动。后面跟着赋值的插入,所以它可能不如单个插入有效。但话说回来,映射将它们的条目成对存储,因此对insert(k, v)
函数的调用可能最终会创建pair<k, v>
。
相关文章:
- 为什么 const std::p air<K,V>& 在 std::map 上基于范围的 for 循环不起作用?
- C++:无法使用 "=" 运算符更改 std::p air 的值
- 如何在创建自定义迭代器时获得 std::p air 的第一个和第二个?
- 使用 std::p air 进行返回值优化
- 标准::在双类和类的 std::p air 上更大
- 为什么 std::p air 的大小与其元素的大小之和不同?
- 像 std::list<std::p air<string, string>> 这样的结构在返回时会被复制吗?
- 查找 std::vector 中的最小值和最大值 std::p air
- 地图是否将元素存储为 std::p air?
- std::p air 会破坏其动态分配的对象吗?
- 如何在 std::p air 中使用 System::Guid 和自定义枚举?
- boost::mpl 不使用(甚至不兼容)std::p air 的原因是什么?
- 在具有 std::p air 键和值的映射中添加 b2vec2
- 无法访问 std::p air 的成员秒
- 如何在 std::map 中从 std::vector of std::p air 中获取输入?
- 二进制">>":未找到采用类型为"std::p air<int,int>"的右操作数的运算符
- 初始化 std::initializer_list 通过 std:: 初始化 std::p air 在初始化 std::array 时不起作用?
- 通过预处理器创建 std::p air<std::string,some_enum>
- 使用 std::map 和 std::p air 作为键,并将列表作为值
- 为什么 std::map 接受 std::p air 作为密钥,而 std::unordered_map 不接受?