我使用的是VS2010,我注意到当我将一个键:值对添加到std :: map中时,如果相似的键已经在地图中,那么插入将被忽略。例如:
std::string pipeName = "pipe1";
_pipes.insert(std::make_pair(pipeName,ppl));
_pipes.insert(std::make_pair(pipeName,ppl));
此操作导致只有一对存储在map中。我想在这种情况下抛出一个异常。所以是的,我可以在插入之前进行比较,如果密钥已经存在,但是std :: map是被迫扔掉它?
答案 0 :(得分:4)
可以强制std :: map抛出吗?
没有。 std::map
的行为定义明确,不包括在重复插入时抛出异常。如果您想要这种行为,您应该编写一个包装类。
答案 1 :(得分:4)
您可以检查返回值并自行抛出异常:
auto p = _pipes.insert(std::make_pair(pipeName,ppl));
if (!p.second)
{
// insert failed, throw something
}
显然,这可以包含在辅助函数或类中。