使用自定义比较器可以安全地实现std :: map异常吗?

dasfex

什么std::map如果定制比较再平衡过程中抛出一个异常会做什么?显然,它应该记住所有先前的回合,并将所有内容恢复为原始状态。是真的吗

Brian Bi

参见[associative.reqmts.except]:

对于关联容器,没有clear()函数会引发异常。erase(k)不会引发异常,除非容器的Compare对象(如果有)引发了该异常

对于关联容器,如果插入单个元素insertoremplace函数中的任何操作都引发了异常,则插入无效。

对于关联容器,swap除非容器容器的交换Compare(如果有)引发该异常,否则任何函数都不会引发异常

因此,您基本上是对的(在插入单个元素的情况下),但这并不意味着容器必须“记住所有先前的转弯”才能“将一切恢复到原始状态”。假设使用自平衡二进制搜索树(不知道是否还有其他可能性)实现关联容器,则仅进行比较以使树向下走以找到必须在其中插入新节点的位置。如果在此过程中通过异常退出比较,则该树尚未被修改,因此容器要做的就是此时释放为新元素分配的内存(如果有)。随后的重新平衡步骤无法生成异常,

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

可以设置一种自定义异常类型,以通过std :: map :: at方法抛出该异常吗?

来自分类Dev

使用+ =运算符可以安全地使用[]创建新的std :: map条目吗?

来自分类Dev

我可以使用自定义删除器简洁地声明std :: unique_ptr吗?

来自分类Dev

为自定义 std::map 迭代器实现 erase()

来自分类Dev

如何仅使用自定义比较器在std :: map中进行搜索?

来自分类Dev

我可以安全地使用#ifdef来了解是否包含c ++ std标头吗?

来自分类Dev

petitparser解析器可以安全地重用吗?

来自分类Dev

可以安全地使用Apache <Location>指令来配置对服务器的访问吗?

来自分类Dev

我可以在Hazelcast开源中实现自定义安全性实现吗?

来自分类Dev

我可以安全地在“ onCreateView”中使用“ getChildFragmentManager”吗?

来自分类Dev

可以安全地使用cakephp 3.0进行生产吗?

来自分类Dev

可以安全地使用`find -exec sh -c`吗?

来自分类Dev

我可以从多个线程的ArrayList中获取迭代器并安全地使用所有迭代器吗?

来自分类Dev

可以在Firebase 3中实现自定义身份验证属性并将其与安全性安全规则一起使用吗?

来自分类Dev

可以安全地将C#两倍与指定值进行比较吗?

来自分类Dev

可以安全地将先前存在的typecast NULL返回与较新的nullptr进行比较吗?

来自分类Dev

具有自定义比较器的C ++ std :: map,用于保持比赛

来自分类Dev

如何在搜索中不使用std :: map的自定义比较功能(map :: find)?

来自分类Dev

如何在搜索中不使用std :: map的自定义比较功能(map :: find)?

来自分类Dev

我可以安全地从c ++中的std :: stringstream中获取c_str吗?

来自分类Dev

将自定义比较器重载到 std::map

来自分类Dev

Map 可以将键作为自定义类型吗?

来自分类Dev

我可以在终结器中安全地访问引用类型实例字段/属性吗?

来自分类Dev

我们可以安全地依赖迭代器的v.end()的位置吗?

来自分类Dev

我可以在已安装的驱动器上以只读模式安全地运行坏块吗?

来自分类Dev

使用较少的自定义运算符实现遍历std :: map会减少包含的元素

来自分类Dev

是std :: list的多元素插入强烈地异常安全吗?

来自分类Dev

我正在尝试使用自定义的比较方法来实现buublesort,但我始终不断收到ArrayIndexOutOfBound异常

来自分类Dev

在其他驱动器上使用Win 10时,可以安全地从驱动器中删除Win 7吗?

Related 相关文章

  1. 1

    可以设置一种自定义异常类型,以通过std :: map :: at方法抛出该异常吗?

  2. 2

    使用+ =运算符可以安全地使用[]创建新的std :: map条目吗?

  3. 3

    我可以使用自定义删除器简洁地声明std :: unique_ptr吗?

  4. 4

    为自定义 std::map 迭代器实现 erase()

  5. 5

    如何仅使用自定义比较器在std :: map中进行搜索?

  6. 6

    我可以安全地使用#ifdef来了解是否包含c ++ std标头吗?

  7. 7

    petitparser解析器可以安全地重用吗?

  8. 8

    可以安全地使用Apache <Location>指令来配置对服务器的访问吗?

  9. 9

    我可以在Hazelcast开源中实现自定义安全性实现吗?

  10. 10

    我可以安全地在“ onCreateView”中使用“ getChildFragmentManager”吗?

  11. 11

    可以安全地使用cakephp 3.0进行生产吗?

  12. 12

    可以安全地使用`find -exec sh -c`吗?

  13. 13

    我可以从多个线程的ArrayList中获取迭代器并安全地使用所有迭代器吗?

  14. 14

    可以在Firebase 3中实现自定义身份验证属性并将其与安全性安全规则一起使用吗?

  15. 15

    可以安全地将C#两倍与指定值进行比较吗?

  16. 16

    可以安全地将先前存在的typecast NULL返回与较新的nullptr进行比较吗?

  17. 17

    具有自定义比较器的C ++ std :: map,用于保持比赛

  18. 18

    如何在搜索中不使用std :: map的自定义比较功能(map :: find)?

  19. 19

    如何在搜索中不使用std :: map的自定义比较功能(map :: find)?

  20. 20

    我可以安全地从c ++中的std :: stringstream中获取c_str吗?

  21. 21

    将自定义比较器重载到 std::map

  22. 22

    Map 可以将键作为自定义类型吗?

  23. 23

    我可以在终结器中安全地访问引用类型实例字段/属性吗?

  24. 24

    我们可以安全地依赖迭代器的v.end()的位置吗?

  25. 25

    我可以在已安装的驱动器上以只读模式安全地运行坏块吗?

  26. 26

    使用较少的自定义运算符实现遍历std :: map会减少包含的元素

  27. 27

    是std :: list的多元素插入强烈地异常安全吗?

  28. 28

    我正在尝试使用自定义的比较方法来实现buublesort,但我始终不断收到ArrayIndexOutOfBound异常

  29. 29

    在其他驱动器上使用Win 10时,可以安全地从驱动器中删除Win 7吗?

热门标签

归档