3

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

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

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

4

2 回答 2

5

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

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

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

于 2013-09-07T19:41:21.820 回答
4

可以强制 std::map 扔它吗?

不。 的行为std::map是明确定义的,并且不包括在重复插入时引发异常。如果你想要这种行为,你应该写一个包装类。

于 2013-09-07T19:41:15.193 回答