当相同的键插入 std::map 时引发异常
Throwing exception when the same key inserted into std::map
我使用VS2010,我注意到当我将键:值对添加到std::map中时,如果映射中已经有相似的键,则忽略插入。所以例如:
std::string pipeName = "pipe1";
_pipes.insert(std::make_pair(pipeName,ppl));
_pipes.insert(std::make_pair(pipeName,ppl));
此操作会导致映射中仅存储一对。在这种情况下,我想抛出一个例外。所以是的,我可以在插入之前比较密钥是否已经存在,但是 std::map 可以强制扔掉它吗?
您可以检查返回值并自己抛出异常:
auto p = _pipes.insert(std::make_pair(pipeName,ppl));
if (!p.second)
{
// insert failed, throw something
}
显然,这可以包装在帮助程序函数或类中。
std::map可以被迫扔掉吗?
不。 std::map
的行为是明确定义的,不包括在重复插入时引发异常。 如果需要此行为,则应编写包装类。
相关文章:
- 如何导出包含具有"std::unique_ptr"值的"std::map"属性的
- 处理多个异常集合的C++方法
- std::map<struct,struct>::find 找不到匹配项,但是如果我循环通过 begin() 到 end(),我在那里看到匹配项
- 我在c++代码中生成了一个运行时#3异常
- 孤立代码块在结构中引发异常
- 使用一个考虑到std::map中键值的滚动或换行的键
- C++中的赋值发生,尽管右侧出现异常
- 从构造函数抛出异常时如何克服内存泄漏
- 异常属于C++中的线程还是进程
- 当类定义不可见时捕获异常
- 为什么 const std::p air<K,V>& 在 std::map 上基于范围的 for 循环不起作用?
- std :: map out_of_range异常未被捕获
- 为什么在打印Un_ordered Map and Map(字典)的密钥和值时存在异常
- std::map at 函数总是抛出异常
- 使用std::map时无法捕获未处理的异常
- std::map - 无异常且无需插入的元素访问
- 当相同的键插入 std::map 时引发异常
- 如何找出std::map方法可以抛出哪些异常
- std::map抛出一个out_of_range异常
- 分割错误:STL MAP的异常行为