当相同的键插入 std::map 时引发异常

Throwing exception when the same key inserted into std::map

本文关键字:map 异常 std 插入      更新时间:2023-10-16

我使用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的行为是明确定义的,不包括在重复插入时引发异常。 如果需要此行为,则应编写包装类。