插入地图的首选/惯用方式是什么?

2023-12-13

我已经确定了将元素插入到 a 中的四种不同方法std::map:

std::map<int, int> function;

function[0] = 42;
function.insert(std::map<int, int>::value_type(0, 42));
function.insert(std::pair<int, int>(0, 42));
function.insert(std::make_pair(0, 42));

其中哪一个是首选/惯用方式? (还有其他我没有想到的方法吗?)


从 C++11 开始,您有两个主要的附加选项。首先,您可以使用insert()使用列表初始化语法:

function.insert({0, 42});

这在功能上相当于

function.insert(std::map<int, int>::value_type(0, 42));

但更加简洁和可读。正如其他答案所指出的,这比其他形式有几个优点:

  • The operator[]方法要求映射类型是可分配的,但情况并非总是如此。
  • The operator[]方法可以覆盖现有元素,并且使您无法判断是否发生了这种情况。
  • 其他形式的insert您列出的内容涉及隐式类型转换,这可能会减慢您的代码速度。

主要缺点是这种形式过去要求键和值是可复制的,因此它不适用于例如一张地图unique_ptr价值观。该问题已在标准中修复,但修复可能尚未达到您的标准库实现。

其次,您可以使用emplace() method:

function.emplace(0, 42);

这比任何形式都更简洁insert(),适用于仅移动类型,例如unique_ptr,理论上可能会稍微更有效(尽管一个像样的编译器应该优化掉差异)。唯一的主要缺点是它可能会让你的读者有点惊讶,因为emplace方法通常不这样使用。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

插入地图的首选/惯用方式是什么? 的相关文章

  • 为什么当实例化新的游戏对象时,它没有向它们添加标签? [复制]

    这个问题在这里已经有答案了 using System Collections using System Collections Generic using UnityEngine public class Test MonoBehaviou
  • 嵌套接口:将 IDictionary> 转换为 IDictionary>?

    我认为投射一个相当简单IDictionary
  • 类模板参数推导 - clang 和 gcc 不同

    下面的代码使用 gcc 编译 但不使用 clang 编译 https godbolt org z ttqGuL template
  • 如何从 appsettings.json 文件中的对象数组读取值

    我的 appsettings json 文件 StudentBirthdays Anne 01 11 2000 Peter 29 07 2001 Jane 15 10 2001 John Not Mentioned 我有一个单独的配置类 p
  • 将 VSIX 功能添加到 C# 类库

    我有一个现有的单文件生成器 位于 C 类库中 如何将 VSIX 项目级功能添加到此项目 最终目标是编译我的类库项目并获得 VSIX 我实际上是在回答我自己的问题 这与Visual Studio 2017 中的单文件生成器更改 https s
  • C# 中通过 Process.Kill() 终止的进程的退出代码

    如果在我的 C 应用程序中 我正在创建一个可以正常终止或开始行为异常的子进程 在这种情况下 我通过调用 Process Kill 来终止它 但是 我想知道该进程是否已退出通常情况下 我知道我可以获得终止进程的错误代码 但是正常的退出代码是什
  • 使用 WebClient 时出现 System.Net.WebException:无法创建 SSL/TLS 安全通道

    当我执行以下代码时 System Net ServicePointManager ServerCertificateValidationCallback sender certificate chain errors gt return t
  • C++ OpenSSL 导出私钥

    到目前为止 我成功地使用了 SSL 但遇到了令人困惑的障碍 我生成了 RSA 密钥对 之前使用 PEM write bio RSAPrivateKey 来导出它们 然而 手册页声称该格式已经过时 实际上它看起来与通常的 PEM 格式不同 相
  • WCF 中 SOAP 消息的数字签名

    我在 4 0 中有一个 WCF 服务 我需要向 SOAP 响应添加数字签名 我不太确定实际上应该如何完成 我相信响应应该类似于下面的链接中显示的内容 https spaces internet2 edu display ISWG Signe
  • 使用 Bearer Token 访问 IdentityServer4 上受保护的 API

    我试图寻找此问题的解决方案 但尚未找到正确的搜索文本 我的问题是 如何配置我的 IdentityServer 以便它也可以接受 授权带有 BearerTokens 的 Api 请求 我已经配置并运行了 IdentityServer4 我还在
  • 如何设计以 char* 指针作为类成员变量的类?

    首先我想介绍一下我的情况 我写了一些类 将 char 指针作为私有类成员 而且这个项目有 GUI 所以当单击按钮时 某些函数可能会执行多次 这些类是设计的单班在项目中 但是其中的某些函数可以执行多次 然后我发现我的项目存在内存泄漏 所以我想
  • 链接器错误:已定义

    我尝试在 Microsoft Visual Studio 2012 中编译我的 Visual C 项目 使用 MFC 但出现以下错误 error LNK2005 void cdecl operator new unsigned int 2
  • 如何使用 C# / .Net 将文件列表从 AWS S3 下载到我的设备?

    我希望下载存储在 S3 中的多个图像 但目前如果我只能下载一个就足够了 我有对象路径的信息 当我运行以下代码时 出现此错误 遇到错误 消息 读取对象时 访问被拒绝 我首先做一个亚马逊S3客户端基于我的密钥和访问配置的对象连接到服务器 然后创
  • 通过指向其基址的指针删除 POD 对象是否安全?

    事实上 我正在考虑那些微不足道的可破坏物体 而不仅仅是POD http en wikipedia org wiki Plain old data structure 我不确定 POD 是否可以有基类 当我读到这个解释时is triviall
  • cmake 将标头包含到每个源文件中

    其实我有一个简单的问题 但找不到答案 也许你可以给我指一个副本 所以 问题是 是否可以告诉 cmake 指示编译器在每个源文件的开头自动包含一些头文件 这样就不需要放置 include foo h 了 谢谢 CMake 没有针对此特定用例的
  • C# 成员变量继承

    我对 C 有点陌生 但我在编程方面有相当广泛的背景 我想做的事情 为游戏定义不同的 MapTiles 我已经像这样定义了 MapTile 基类 public class MapTile public Texture2D texture pu
  • 基于 OpenCV 边缘的物体检测 C++

    我有一个应用程序 我必须检测场景中某些项目的存在 这些项目可以旋转并稍微缩放 更大或更小 我尝试过使用关键点检测器 但它们不够快且不够准确 因此 我决定首先使用 Canny 或更快的边缘检测算法 检测模板和搜索区域中的边缘 然后匹配边缘以查
  • 如何在文本框中插入图像

    有没有办法在文本框中插入图像 我正在开发一个聊天应用程序 我想用图标图像更改值 等 但我找不到如何在文本框中插入图像 Thanks 如果您使用 RichTextBox 进行聊天 请查看Paste http msdn microsoft co
  • C++ 中类级 new 删除运算符的线程安全

    我在我的一门课程中重新实现了新 删除运算符 现在我正在使我的代码成为多线程 并想了解这些运算符是否也需要线程安全 我在某处读到 Visual Studio 中默认的 new delete 运算符是线程安全的 但这对于我的类的自定义 new
  • 使用.NET技术录制屏幕视频[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 有没有一种方法可以使用 NET 技术来录制屏幕 无论是桌面还是窗口 我的目标是免费的 我喜欢小型 低

随机推荐

  • 第一个最后一个元素

    XSLT XML 问题 研究一个简单的转换 我有简单的索引 xml 输入 我必须为每章输出第一个和最后一个元素 如下所示 任何帮助都感激不尽 问候 JJ Input
  • SHGetPropertyStoreForWindow - 如何设置现有 System.AppUserModel.ID 的属性

    所以我通过以下方式将窗口从主选项卡组中分离出来IPropertyStore via SHGetPropertyStoreForWindow像这样 IPropertyStore SetValue pps PKEY AppUserModel I
  • Azure ML 和 Azure ML 实验之间的区别

    我是 Azure ML 的新手 我有一些疑问 有人可以澄清下面列出的我的疑问吗 Azure ML 服务和 Azure ML 实验服务之间有什么区别 Azure ML 工作台和 Azure ML Studio 之间有什么区别 我想使用 azu
  • 编辑控件不生成 WM_COMMAND 消息

    我有一个编辑控件 在父窗口中我正在听WM COMMAND信息 但我的控件不会在更改时发送它 此外 当我使用 Spy 观看消息时 我只能在编辑控件本身上看到不同的键盘消息 并且主父窗口中的唯一消息是WM CTLCOLOREDIT P S 我正
  • 如何在TabView的选项卡之间发送信号(Qt5)

    我有带有两个选项卡的 TabView 每个选项卡都有 Item 元素 其中包含其他内容 我需要从一个选项卡发送信号并在其他选项卡中捕获 处理 它 如果我尝试将信号从一个选项卡 项目 发送到另一个选项卡 它不起作用 并且不会显示任何错误 我找
  • React Noob - onChange 元素失去焦点

    我正在尝试创建一个基本的登录页面 该页面接受用户凭据并将其提交到登录 api 问题是当onChange事件触发 设置用户凭据 元素失去焦点 我不应该更新凭证吗onChange import React Component PropTypes
  • 显示来自 GridFS 的 HTML 图像

    我正在 GridFS 中上传图像 但不知道如何在 img tag 我尝试了以下代码 conn once open function var gfs Grid conn db mongoose mongo gfs files find fil
  • WiX v3 安装项目,无法通过应用程序和功能卸载

    我很难弄清楚是什么导致了这个奇怪的问题 因此 我按照 WiX v3 安装项目文档创建了一个非常基本的 msi 几乎只是提供的模板 但无论我尝试什么 每当我通过 Windows 10 卸载它时Apps Features界面 我不断收到这个 但
  • Typescript如何使用稍后指定的泛型类型?

    首先 这是我第一次用CodeSandbox来创建一个简化的例子 欢迎任何有关如何改进这一点的建议 问题 我想介绍动物的事实 有些事实是所有动物共有的 而另一些则是动物特有的 在我的主要组件中App 我还不知道类型 所以我想保留它的通用性An
  • 通过 AlarmManager 设置不精确的警报时会有多少延迟? [复制]

    这个问题在这里已经有答案了 使用时AlarmManager要设置闹钟 除非您设置了精确的闹钟 否则可能会出现延迟 在指定时间之后的某个时间触发闹钟 是否可以保证延迟的范围是多少 我想成为一名负责任的开发人员 如果延迟不超过 例如 一分钟 则
  • 在iphone中的uiwebview中显示文本

    我想在 uiwebview 中显示文本数据 有人可以指导如何做同样的事情 使用 UIWebViews loadHTMLString 方法 void loadHTMLString NSString string baseURL NSURL b
  • 在 SQL 中使用变量模式持久保存复杂类型的最有效方法

    我在做什么 我正在创建一个 SQL 表 它将为复杂类型的对象提供后端存储机制 我正在尝试确定如何以最佳性能实现这一目标 我需要能够查询复杂类型的每个单独的简单类型值 例如 地址复杂类型中城市的字符串值 我原本以为可以将复杂类型值作为 XML
  • Eclipse 告诉我一个方法未定义,而实际上它已明确定义

    我正在 RAD 7 5 中工作 我正在将一个包从一个 Web 项目导入到另一个 Web 项目中 我实例化该类并尝试使用其方法之一 但出现该方法未定义的构建错误 该方法是公开的 除此方法外 所有其他方法均有效 我从中导入的项目已正确构建 我尝
  • 正则表达式 - 以特定字符串开头但不以另一个子字符串结尾

    给定两个字符串s1 and s2 我正在尝试编写一个正则表达式来匹配以s1但不以s2 示例 s1 测试 s2 坏 TEST 101比赛 测试一些 DESC 匹配 TEST 101 BAD 不应匹配 TEST SOME DESC BAD 不应
  • 无法让 Elasticsearch 与 Django 一起使用

    我正在尝试在 Ubuntu 14 04 上使用 Django 和 Haystack 以及 Elasticsearch 作为后端 我安装了 Elasticsearch 和 Haystack 运行 python manage py runser
  • 设计一个具有延迟加载属性的 Java POJO

    请考虑下面的例子 Web 应用程序为每个登录用户创建一个用户对象 这个对象有简单的String属性为firstName lastName 每个用户都可以拥有一个car也 考虑获取用户car非常昂贵 因此我们不希望在用户登录时设置用户的汽车
  • 无法使用 WebSockets 连接,未更改readyState

    我尝试了几种方法 甚至复制 粘贴http code google com p phpwebsocket 我使用 Google Chrome 5 0 375 70 beta 错误总是相同的 错误 INVALID STATE ERR DOM 异
  • Groovy Power 打印

    Groovy 有一个电源断言 但我想要一个电源打印 例如 def foo banna5 monkey 7 x 70 println foo foo monkey monkey x 2 x 2 看到 println 行中重复的 foo mon
  • 如何匹配CIM/RDF中的JAXB元素?

    尝试根据 IEC 61970 通用信息模型 用于电力系统模型 从 CIM XML 文件加载模型时 我发现了一个问题 根据 JAXB 元素之间的图表由 XmlREF XmlID 提供 并且这两者应该等于匹配 但在 CIM RDF 中 通过 I
  • 插入地图的首选/惯用方式是什么?

    我已经确定了将元素插入到 a 中的四种不同方法std map std map