STD 集合中引用的生命周期

2024-02-24

对 STD 集合(例如映射)返回的元素的引用有效多久?

例如,在这段代码中:

struct Employee{
   int salary;
   string name; // the key
     };

map<string,Employee> allemployees;
...
Employee & Joe = allemployees["Joe Smith"];
Joe.salary=150; // change "Joe Smith"'s salary
assert(allemployees["Joe Smith"].salary==150); //always true
 ....
allemployees["Mark Jones"]= Employee();
... // No "Joe Smith" operations in the dots
 Joe.salary=200;
 assert (allemployees["Joe Smith"].salary==200); //true or not?

}

换句话说,我从地图中获取了一个值引用。但随后我会在底层地图上进行各种其他插入、删除等操作。原来的价值参考还好吗?那么其他收藏呢?

而且,我怎么知道这一点?我看了看斯特鲁斯特鲁普,但什么也没看到。

来自 C 背景的我对引用和集合以及它们的交互感到困惑。我是否应该考虑其值本身就是引用的地图?这意味着什么?

因此,一个更普遍的问题是:我在哪里可以找到这个问题和类似问题的规范答案?

[这是已删除问题的修订版]


std::map使迭代器无效的相同操作会使引用无效 - 这在标准和 cppreference.com 等地方都有详细记录。

总结为std::map,只要您不这样做,参考文献就有效clear the map, or erase具体引用的元素;插入或删除其他元素就可以了。例如,cpprefererence 映射::插入文档 http://en.cppreference.com/w/cpp/container/map/insert说“没有迭代器或引用无效。”。

你会发现有关于其他容器及其操作的声明...... (jrok 在评论中指出,推动deque是引用保持有效但迭代器无效的操作示例)。

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

STD 集合中引用的生命周期 的相关文章

  • MEX 文件中的断言导致 Matlab 崩溃

    我正在使用mxAssert 宏定义为matrix h在我的 C 代码中 mex 可以完美编译 当我调用的 mex 代码中违反断言时 该断言不会导致我的程序崩溃 而是导致 Matlab 本身崩溃 我错过了什么吗 这是有意的行为吗 当我查看 M
  • 添加对共享类的多个 WCF 服务的服务引用

    我正在尝试将我的 WCF Web 服务拆分为几个服务 而不是一个巨大的服务 但是 Visual Studio Silverlight 客户端 复制了两个服务共享的公共类 这是一个简单的例子来说明我的问题 在此示例中 有两个服务 两者都返回类
  • 在 C++ 中分割大文件

    我正在尝试编写一个程序 该程序接受一个大文件 任何类型 并将其分成许多较小的 块 我想我已经有了基本的想法 但由于某种原因我无法创建超过 12 kb 的块大小 我知道谷歌等上有一些解决方案 但我更感兴趣的是了解这个限制的根源是什么 然后实际
  • 在 OpenCL 中将函数作为参数传递

    是否可以在 OpenCL 1 2 中将函数指针传递给内核 我知道可以用C实现 但不知道如何在OpenCL的C中实现 编辑 我想做这篇文章中描述的同样的事情 在 C 中如何将函数作为参数传递 https stackoverflow com q
  • 捕获 foreach 条件中抛出的异常

    我有一个foreach在 foreach 本身的条件下循环期间中断的循环 有没有办法try catch抛出异常然后继续循环的项 这将运行几次 直到异常发生然后结束 try foreach b in bees exception is in
  • 通信对象 System.ServiceModel.Channels.ServiceChannel 不能用于通信

    通信对象System ServiceModel Channels ServiceChannel 无法用于通信 因为它处于故障状态 这个错误到底是什么意思 我该如何解决它 您收到此错误是因为您让服务器端发生 NET 异常 并且您没有捕获并处理
  • std::map 和二叉搜索树

    我读过 std map 是使用二叉搜索树数据结构实现的 BST 是一种顺序数据结构 类似于数组中的元素 它将元素存储在 BST 节点中并按其顺序维护元素 例如如果元素小于节点 则将其存储在节点的左侧 如果元素大于节点 则将其存储在节点的右侧
  • 如何在 VS 中键入时显示方法的完整文档?

    标题非常具有描述性 是否有任何扩展可以让我看到我正在输入的方法的完整文档 我想查看文档 因为我可以在对象浏览器中看到它 其中包含参数的描述和所有内容 而不仅仅是一些 摘要 当然可以选择查看所有覆盖 它可能是智能感知的一部分 或者我不知道它并
  • 在 C# 中将位从 ulong 复制到 long

    所以看来 NET 性能计数器类型 http msdn microsoft com en us library system diagnostics performancecounter aspx有一个恼人的问题 它暴露了long对于计数器
  • C++派生模板类继承自模板基类,无法调用基类构造函数[重复]

    这个问题在这里已经有答案了 我试图从基类 模板 继承 派生类也是模板 它们具有相同的类型 T 我收到编译错误 非法成员初始化 Base 不是基类或成员 为什么 如何调用基类构造函数 include
  • 范围和临时初始化列表

    我试图将我认为是纯右值的内容传递到范围适配器闭包对象中 除非我将名称绑定到初始值设定项列表并使其成为左值 否则它不会编译 这里发生了什么 include
  • 在 C 中复制两个相邻字节的最快方法是什么?

    好吧 让我们从最明显的解决方案开始 memcpy Ptr const char a b 2 调用库函数的开销相当大 编译器有时不会优化它 我不会依赖编译器优化 但即使 GCC 很聪明 如果我将程序移植到带有垃圾编译器的更奇特的平台上 我也不
  • C# 搜索目录中包含字符串的所有文件,然后返回该字符串

    使用用户在文本框中输入的内容 我想搜索目录中的哪个文件包含该文本 然后我想解析出信息 但我似乎找不到该字符串或至少返回信息 任何帮助将不胜感激 我当前的代码 private void btnSearchSerial Click object
  • 无法使用 Ninject 将依赖项注入到从 Angular 服务调用的 ASP.NET Web API 控制器中

    我将 Ninject 与 ASP NET MVC 4 一起使用 我正在使用存储库 并希望进行构造函数注入以将存储库传递给其中一个控制器 这是实现 StatTracker 接口的上下文对象 EntityFramework public cla
  • 内核开发和 C++ [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 从我know https stackoverflow com questions 580292 what languages are windo
  • 如何在 GCC 5 中处理双 ABI?

    我尝试了解如何克服 GCC 5 中引入的双重 ABI 的问题 但是 我没能做到 这是一个重现错误的非常简单的示例 我使用的GCC版本是5 2 如您所见 我的主要函数 在 main cpp 文件中 非常简单 main cpp include
  • 我应该在应用程序退出之前运行 Dispose 吗?

    我应该在应用程序退出之前运行 Dispose 吗 例如 我创建了许多对象 其中一些对象具有事件订阅 var myObject new MyClass myObject OnEvent OnEventHandle 例如 在我的工作中 我应该使
  • boost::program_options:带有固定和可变标记的参数?

    是否可以在 boost program options 中使用此类参数 program p1 123 p2 234 p3 345 p12 678 即 是否可以使用第一个标记指定参数名称 例如 p 后跟一个数字 是动态的吗 我想避免这种情况
  • Azure函数版本2.0-应用程序blobTrigger不工作

    我有一个工作功能应用程序 它有一个 blob 输入和一个事件中心输出 在测试版中工作 随着最新的更改 我的功能不再起作用 我尝试根据发行说明更新 host json 文件 但它没有引用 blob 触发器 version 2 0 extens
  • 如何创建向后兼容 Windows 7 的缩放和尺寸更改每显示器 DPI 感知应用程序?

    我是 WPF 和 DPI 感知 API 的新手 正在编写一个在 Windows 7 8 1 和 10 中运行的应用程序 我使用具有不同每个显示器 DPI 设置的多个显示器 并且有兴趣将我的应用程序制作为跨桌面配置尽可能兼容 我已经知道可以将

随机推荐

  • Spring Boot 中的大小注释返回 400 Bad Request

    我在执行时没有收到消息错误 SizeSpring Boot bean 类中的注释 下面是我的文件 pom xml
  • 我可以在不先查询 EF 实体的情况下更新它吗?

    这是我的场景 我有一条通过 WCF 传递的简单消息 该消息代表现有数据库记录并具有all进行计算所需的数据字段 一旦我完成了计算 我想更新one该数据记录上的字段 目前 尝试简单地设置实体框架版本的所有字段 然后保留对象上下文的状态似乎没有
  • 如何获得两个具有不同绘图的窗口

    当我们有一个带有绘图的窗口时 有没有办法告诉 R 在新窗口中显示新绘图 plot 1 1 dev new plot 2 2 dev set dev prev go back to first title main test dev 1 de
  • 连接 ECONNREFUSED - 节点 js 、 sql

    我在 js 文件中有下一个代码 var mysql require mysql var TEST DATABASE nodejs mysql test var TEST TABLE test var client mysql createC
  • SWIFT 在 Main.storyboard 中定义的 UIImageview 中旋转图像

    我是 SWIFT 新手 正在练习学习 但在某些方面遇到了一些困难 我在 Main storyboard 定义的 UIImageview 中有一个图像 我需要旋转它 我有一个 IBOutlet 定义为 IBOutlet weak var im
  • 如何在 Redux 中为每个实例创建一个存储?

    有时 在 Redux 应用程序中为每个实例创建一个存储会很有用 Redux 的创建者自己创建了一个 Gist 来描述如何实现这一点 https gist github com gaearon eeee2f619620ab7b55673a4e
  • 在 c# 中使用 gmail API 修改消息标签时出现权限不足 [403] 错误

    我正在尝试使用 gmail api 读取 gmail 邮件消息 阅读邮件后 我将删除消息标签 这样我就不需要再次处理它 我能够成功阅读邮件 但是当我尝试修改邮件标签时 service Users Messages Modify mods u
  • 如何将 JSON 转换为字符串数组

    是否可以使用for json path以 JSON 数组格式格式化行 我有一个这样的专栏 Col1 abc def ghi jkl 我想像这样格式化它 Col1 abc def ghi jkl 到目前为止我已经让它看起来像这样 Col1 a
  • 如何从 C# 数组中删除重复项?

    我一直在与一个string C 中从函数调用返回的数组 我可能可以投射到Generic集合 但我想知道是否有更好的方法来做到这一点 可能通过使用临时数组 从 C 数组中删除重复项的最佳方法是什么 您可以使用 LINQ 查询来执行此操作 in
  • Web Api 参数始终为空

    当我使用下面的ajax调用下面的Post方法时 为什么参数总是为空 public IEnumerable
  • UWP 应用程序因多个错误而失败 WACK

    过去 我成功开发了一些 UWP 应用程序并将其部署到 MS Store 目前 在尝试通过 WACK 测试时 遇到了大量意想不到的失败 这些失败是我以前从未遇到过的类型 我在 2017 年 11 月开始了这个特定的项目 从技术上讲 它并没有那
  • 如何检测 Android 设备麦克风中的打击

    如何检测用户何时向设备麦克风吹气 然后 这将用于触发应用程序的某些操作 检测用户何时向麦克风吹气的工作可分为两部分 1 从麦克风获取输入 2 监听吹气声音 向麦克风吹气的噪音 声音由低频声音组成 我们将使用低通滤波器来减少进入麦克风的高频声
  • Android proguard 问题:路径不能为 null 或空字符串。路径='空'

    设置之前一切正常 minifyEnabled true and 收缩资源 true 设置这些值后 每当我运行项目时 我都会收到此错误 Information Gradle tasks app assembleProdRelease Erro
  • Mac OSX 上的 laravel homestead/vagrant/virtualbox 非常慢

    我在用Mac 上的 Homestead Vagrant Virtualbox Problem 虽然我发现很多线程 答案如何解决响应时间慢的问题 例如 TTFB 但没有一个起作用 我的响应时间在 25 32 秒之间 这对于本地开发来说显然是不
  • SQL 错误:ORA-02291:完整性约束

    我正在创建一个试图从外键访问值的数据库 我创建了以下两个表 CREATE TABLE Component ComponentID varchar2 9 PRIMARY KEY TypeID varchar2 9 REFERENCES Typ
  • 使用信号量实现 N 进程屏障

    我目前正在为之前迭代的操作系统考试进行培训 我遇到了这个 实施 N 进程屏障 即 是 确保每个流程都完成 他们中的一群人在某个时刻等待着 点在其各自的执行中 对于 其他进程达到他们的 给定点 您有以下内容 可用操作 init sem val
  • 删除核心数据中的重复对象(swift)

    我将对象保存到 JSON 中的核心数据 这是我使用for循环 假设我称之为setup功能 由于用户可能会停止此循环 因此核心数据中保存的对象将是部分的 用户可以重新启动此setup函数 重新启动解析和将对象保存到核心数据的过程 现在 如果我
  • 使用 Linux sort 命令对多个键进行排序

    说我有这个文件 cat a txt c 1002 4 f 1001 1 d 1003 1 a 1001 3 e 1004 2 b 1001 2 我想按第二列排序 然后按第三列排序 第二列是数字 而第三列可以视为字符串 我知道以下命令效果很好
  • 单击任意位置以在 CKEditor 中聚焦

    在 FireFox 中 我可以单击 CKEditor 350px x 250px 中的任意位置 将焦点放在编辑器顶部的单个文本段落上 然而 在 IE6 中 我知道 但我们的客户坚持 我必须直接单击段落顶部以将光标聚焦并随后编辑文本 CKEd
  • STD 集合中引用的生命周期

    对 STD 集合 例如映射 返回的元素的引用有效多久 例如 在这段代码中 struct Employee int salary string name the key map