将相同的键插入 std::map 时抛出异常

Mic*_* IV 3 c++ stl

我使用 VS2010,我注意到当我向 std::map 添加一个键:值对时,如果映射中已经存在类似的键,那么插入将被忽略。例如:

     std::string pipeName = "pipe1";
_pipes.insert(std::make_pair(pipeName,ppl));
    _pipes.insert(std::make_pair(pipeName,ppl));
Run Code Online (Sandbox Code Playgroud)

这个操作导致只有一对存储在地图中。我想在这种情况下抛出异常。所以是的,如果键已经存在,我可以在插入之前进行比较,但是可以强制 std::map 抛出它?

jua*_*nza 5

您可以检查返回值并自己抛出异常:

auto p = _pipes.insert(std::make_pair(pipeName,ppl));
if (!p.second)
{
  // insert failed, throw something
}
Run Code Online (Sandbox Code Playgroud)

显然,这可以包装在辅助函数或类中。