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

时间:2013-09-07 19:39:12

标签: c++ stl

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

     std::string pipeName = "pipe1";
_pipes.insert(std::make_pair(pipeName,ppl));
    _pipes.insert(std::make_pair(pipeName,ppl));

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

2 个答案:

答案 0 :(得分:4)

  

可以强制std :: map抛出吗?

没有。 std::map的行为定义明确,不包括在重复插入时抛出异常。如果您想要这种行为,您应该编写一个包装类。

答案 1 :(得分:4)

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

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

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