C ++空映射分配:等于vs插入

奔腾Pro200

我有一个朋友在工作,他鼓励我不要将键/值对分配到一个空的映射中,如下所示:

int somefunc(map<int, int> somemap) {
    somemap.clear();
    somemap[12] = 42;
}

他说,由于清除了somemap映射变量,因此somemap [12]是无效的访问。我认为,即使在调试模式下进行编译,也没有C ++编译器会产生程序集,而该程序集会不必要地尝试访问上述分配上的somemap [12]。通常情况下,上面的最后一行将被编译为与此行相同的程序集:

somemap.insert(std :: pair(12,42));

真的吗?是否有任何理由通过插入与早期方法进行赋值?我更喜欢较早的,因为它更短。

史蒂夫

是的,最后一行将始终插入一个元素(如果尚不存在)。

C ++标准的23.4.4.3节开始

T& operator[](const key_type& x);
  1. 效果:如果在映射中没有等效于x的键,则将value_type(x,T())插入到映射中。

地图:: []操作被定义为:

返回对该值的引用,该值映射到与键等效的键,如果该键尚不存在,则执行插入。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

C ++空映射分配:等于vs插入

来自分类Dev

插入数据后,C ++映射为空。

来自分类Dev

C ++映射未正确插入

来自分类Dev

C ++:将成对的类对象插入映射

来自分类Dev

C ++映射插入问题包含其他映射的对象

来自分类Dev

使用c ++中的映射指针将值插入映射

来自分类Dev

如果 A 列中的单元格不为空,则 B 列等于,C 列等于

来自分类Dev

C ++多个运算符:分配A或B不等于C

来自分类Dev

C ++:STL映射,插入新值不起作用

来自分类Dev

C ++将具有构造函数的对象插入映射

来自分类Dev

从字符串中提取整数并插入到C ++映射

来自分类Dev

C++,映射插入&&文件流读取造成麻烦

来自分类Dev

插入已分配字符的C字符数组打印数字

来自分类常见问题

在C ++地图中插入vs放置vs运算符[]

来自分类Dev

C#映射JSON对象显示为空

来自分类Dev

可空变量在内存分配C#中的优势

来自分类Dev

分配后C字符串为空

来自分类Dev

可空变量在内存分配C#中的优势

来自分类Dev

C ++插入空向量不能使用花括号

来自分类Dev

MySqlBulkUploader 将空值从 CSV 插入到 MySql c#

来自分类Dev

C等于python的map()

来自分类Dev

C ++什么时候在堆vs堆栈上分配?

来自分类Dev

C++:'char*' vs 'char',尝试分配变量时出错

来自分类Dev

C vs C ++ sizeof

来自分类Dev

我对数据库的插入方法插入空值,而不是填充的C#

来自分类Dev

C99警告将空指针分配给非空指针?

来自分类Dev

c / c ++在堆栈上分配

来自分类Dev

无法通过C#中的存储过程在可为空的列中插入空值

来自分类Dev

如何在C#,MVC中为字符串分配映射路径