为什么在 STL 映射中用作值的类需要...中的默认构造函数?

2023-11-27

下面是用作映射中的值的类:

class Book
{
    int m_nId;
public:
    // Book() { }  <----- Why is this required?
    Book( int id ): m_nId( id ) { }

};

main() 内部:

map< int, Book > mapBooks;

for( int i = 0; i < 10; ++i )
{
    Book b( i );
    mapBooks[ i ] = b;
}

导致错误的语句是:

mapBooks[ i ] = b;

如果我添加默认构造函数,则不会出现该错误。但是,我不明白为什么需要。谁能解释一下吗?如果我使用insert(),问题没有出现。

顺便说一下,我使用的是Visual C++ 2008来编译。


operator[]执行两步过程。首先它发现或创造给定键的映射条目,然后返回对该条目的值部分的引用,以便调用代码可以读取或写入它。

如果条目之前不存在,则在分配之前需要默认构造条目的一半值。这正是界面需要与条目已存在的情况保持一致的工作方式。

如果需要在地图中使用这种类型,那么您必须避免使用operator[]通过使用find and insert“手动”。

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

为什么在 STL 映射中用作值的类需要...中的默认构造函数? 的相关文章

  • 如何将 std::string& 转换为 C# 引用字符串

    我正在尝试将 C 函数转换为std string参考C 我的 API 如下所示 void GetStringDemo std string str 理想情况下 我希望在 C 中看到类似的东西 void GetStringDemoWrap r
  • 类型中的属性名称必须是唯一的

    我正在使用 Entity Framework 5 并且有以下实体 public class User public Int32 Id get set public String Username get set public virtual
  • 通过引用传递 [C++]、[Qt]

    我写了这样的东西 class Storage public Storage QString key const int value const void add item QString int private QMap
  • std::list 线程push_back、front、pop_front

    std list 线程安全吗 我假设不是这样 所以我添加了自己的同步机制 我认为我有正确的术语 但我仍然遇到问题 每个函数都由单独的线程调用 Thread1 不能等待 它必须尽可能快 std list
  • 如何在 C# 中打开 Internet Explorer 属性窗口

    我正在开发一个 Windows 应用程序 我必须向用户提供一种通过打开 IE 设置窗口来更改代理设置的方法 Google Chrome 使用相同的方法 当您尝试更改 Chrome 中的代理设置时 它将打开 Internet Explorer
  • -webkit-box-shadow 与 QtWebKit 模糊?

    当时有什么方法可以实现 webkit box shadow 的工作模糊吗 看完这篇评论错误报告 https bugs webkit org show bug cgi id 23291 我认识到这仍然是一个问题 尽管错误报告被标记为RESOL
  • 如何使从 C# 调用的 C(P/invoke)代码“线程安全”

    我有一些简单的 C 代码 它使用单个全局变量 显然这不是线程安全的 所以当我使用 P invoke 从 C 中的多个线程调用它时 事情就搞砸了 如何为每个线程单独导入此函数 或使其线程安全 我尝试声明变量 declspec thread 但
  • 用于 FTP 的文件系统观察器

    我怎样才能实现FileSystemWatcherFTP 位置 在 C 中 这个想法是 每当 FTP 位置添加任何内容时 我都希望将其复制到我的本地计算机 任何想法都会有所帮助 这是我之前问题的后续使用 NET 进行选择性 FTP 下载 ht
  • WPF 数据绑定到复合类模式?

    我是第一次尝试 WPF 并且正在努力解决如何将控件绑定到使用其他对象的组合构建的类 例如 如果我有一个由两个单独的类组成的类 Comp 为了清楚起见 请注意省略的各种元素 class One int first int second cla
  • 方程“a + bx = c + dy”的积分解

    在等式中a bx c dy 所有变量都是整数 a b c and d是已知的 我如何找到整体解决方案x and y 如果我的想法是正确的 将会有无限多个解 由最小公倍数分隔b and d 但我只需要一个解决方案 我可以计算其余的 这是一个例
  • 人脸 API DetectAsync 错误

    我想创建一个简单的程序来使用 Microsoft Azure Face API 和 Visual Studio 2015 检测人脸 遵循 https social technet microsoft com wiki contents ar
  • C# 列表通用扩展方法与非通用扩展方法

    这是一个简单的问题 我希望 集合类中有通用和非通用方法 例如List
  • 在 Unity 中实现 Fur with Shells 技术

    我正在尝试在 Unity 中实现皮毛贝壳技术 http developer download nvidia com SDK 10 5 direct3d Source Fur doc FurShellsAndFins pdf Fins 技术被
  • 如何获取 EF 中与组合(键/值)列表匹配的记录?

    我有一个数据库表 其中包含每个用户 年份组合的记录 如何使用 EF 和用户 ID 年份组合列表从数据库获取数据 组合示例 UserId Year 1 2015 1 2016 1 2018 12 2016 12 2019 3 2015 91
  • 实例化类时重写虚拟方法

    我有一个带有一些虚函数的类 让我们假设这是其中之一 public class AClassWhatever protected virtual string DoAThingToAString string inputString retu
  • C 函数 time() 如何处理秒的小数部分?

    The time 函数将返回自 1970 年以来的秒数 我想知道它如何对返回的秒数进行舍入 例如 对于100 4s 它会返回100还是101 有明确的定义吗 ISO C标准没有说太多 它只说time 回报 该实现对当前日历时间的最佳近似 结
  • 有没有办法让 doxygen 自动处理未记录的 C 代码?

    通常它会忽略未记录的 C 文件 但我想测试 Callgraph 功能 例如 您知道在不更改 C 文件的情况下解决此问题的方法吗 设置变量EXTRACT ALL YES在你的 Doxyfile 中
  • C++ 中的 include 和 using 命名空间

    用于使用cout 我需要指定两者 include
  • 在Android Studio gradle项目中使用NDK和STL

    我在将 stlport 链接到 Android Studio 中的 gradle 项目时遇到问题 使用 NDK 的 Eclipse Android 项目迁移到 Android Studio 该项目使用 STL 我有包含内容的 android
  • Mono 应用程序在非阻塞套接字发送时冻结

    我在 debian 9 上的 mono 下运行一个服务器应用程序 大约有 1000 2000 个客户端连接 并且应用程序经常冻结 CPU 使用率达到 100 我执行 kill QUIT pid 来获取线程堆栈转储 但它总是卡在这个位置

随机推荐

  • Django 删除文件字段

    我正在 Django 中构建一个网络应用程序 我有一个上传文件的模型 但无法删除该文件 这是我的代码 class Song models Model name models CharField blank True max length 1
  • Tomcat 引起:java.util.zip.ZipException:打开 zip 文件时出错

    我有一个 spring mvc 项目 但它抛出了Caused by java util zip ZipException error in opening zip file当我通过 Tomcat 运行它时 如何确定哪个 jar 文件没有正确
  • 如何在IIS7.5中启用ASP经典

    我在 Windows 7 中运行 IIS 7 5 并且已经进入 打开或关闭 Windows 功能 并在 Internet 信息服务 万维网服务 应用程序开发功能 中启用了 ASP 完成此操作后 我开始收到 HTTP 404 错误 由于扩展名
  • 替换日期时间日期中的年份

    我有一个带有一列的表 dateDT 格式为日期时间和年份的变量输入 selYear 在我的 Select 中 格式为 int 如何使用变量输入替换表中日期中的年份并以日期时间格式返回结果 在选择中 我已尝试以下操作 但这返回错误的日期 年份
  • 使用下划线 groupby 按颜色对一组汽车进行分组

    我有一系列的汽车 car make nissan model sunny colour red 我将如何使用 underscore js 按颜色对数组进行分组 我尝试了一些组合 但我不太确定如何指定我的迭代器条件 var carsGroup
  • OSError:无法打开共享对象文件:即使文件位于文件夹中,也没有此类文件或目录

    我已经为此奋斗了很长一段时间了 我正在尝试安装 Yaafe 来提取音频特征 我按照这里的说明操作 https github com Yaafe Yaafe 一切都安装得很好 但是当我尝试运行测试文件 frames py 时 出现以下错误 F
  • C - 在内存被释放()后访问数据?

    我读了很多关于标准 C 中的 malloc 和 free 的内容 据我了解 您malloc 只为了一次记忆 然后你free 同样的记忆只有一次 这可能是不好的做法 但我明白 在你之后malloc 内存 您可以定义多个指向它的指针 而一旦你f
  • 酸洗 scipy interp1d 样条

    我想知道有没有简单的腌制方法interp1dscipy 中的对象 这种天真的方法似乎不起作用 import pickle import numpy as np from scipy interpolate import interp1d x
  • OpenMP 和 NUMA 的关系?

    我有一台双路 Xeon E5522 2 26GHZ 机器 禁用超线程 在支持 NUMA 的 Linux 内核 3 0 上运行 ubuntu 服务器 架构布局为每个插槽 4 个物理核心 OpenMP 应用程序在这台机器上运行 我有以下问题 在
  • 如何创建Python卷积核?

    我正在尝试创建一个卷积核 中间值为 1 5 不幸的是 我不断地想出如何做到这一点的想法 我正在尝试创建类似的东西 Array 0 1 0 1 1 5 1 0 1 0 由于 OpenCV 使用 Numpy 来显示图像 因此您可以简单地使用 N
  • 使用 Carrierwave 清理 tmp 目录

    我使用 Carrierwave 进行图像上传 在我的表单中 我添加了一个用于缓存的隐藏字段 如文档中所述 form for user html multipart true do f p f label image your image f
  • python的csv阅读器可以保留引号吗?

    我想使用 python CSV 阅读器 但我想保留引号 这就是我想要的 gt gt gt s simple split test gt gt gt reader csv reader s delimiter skipinitialspace
  • 通过javascript获取浏览器书签[关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 我们想为我们的客户提供在线书签服务 因此 最好还提供一个将本地书签存储到我们的在线工具中的功能 这不应该自动完成 用户应该确认此操作 仅在有人认为我
  • R 是否有像 python 一样的startswith 或endswith 函数? [关闭]

    Closed 这个问题需要细节或清晰度 目前不接受答案 gt startsWith abc a 1 TRUE gt startsWith abc c 1 FALSE gt endsWith abc a 1 FALSE gt endsWith
  • 使用 System.Net.Mail 通过 smtp 服务器加速发送多封电子邮件

    我是 C 的新手 但我从 VB Net 学到了很多关于 Windows Net 编程的知识 我刚刚制作了一个简单的 SMTP 客户端 它可以从程序发送电子邮件 它是一个控制台应用程序 一次只能通过服务器发送一封电子邮件 这非常慢 我需要通过
  • 删除列表框上的滚动条

    我在 vba 中使用 userForm 并且有一个列表框 我想删除霍罗兹 从底部滚动条 有没有办法做到这一点 我在属性框中没有看到任何选项 当您将列表框的列宽格式属性设置为宽 然后根据数据调整控件大小时 就会出现这种情况 它将显示滚动条 要
  • 我可以声明 Type 的变量而不在编译时指定 T 吗?

    如何动态加载 MyContent 类 我有 1interface
  • 如何查看表的日志数据绿屏DB2

    如何查看指定表中的日志数据 我想查看某个表在指定时间范围内发生了什么情况 我使用以下命令获取了表上的信息 DSPFD 文件 P6PRDBDB00 P6OIDPF 获得了日志名称和库 但我不知道如何查看对象 P6OIDPF I did go
  • hive 中的映射类型变量

    我在尝试在配置单元中定义地图类型时遇到问题 根据蜂巢手册肯定有地图类型 不幸的是没有任何关于如何使用它的示例 假设 我有一个包含以下列的表 用户 Name Ph CategoryName 此 CategoryName 列具有一组特定的值 现
  • 为什么在 STL 映射中用作值的类需要...中的默认构造函数?

    下面是用作映射中的值的类 class Book int m nId public Book lt Why is this required Book int id m nId id main 内部 map lt int Book gt ma