我使用 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 抛出它?
您可以检查返回值并自己抛出异常:
auto p = _pipes.insert(std::make_pair(pipeName,ppl));
if (!p.second)
{
// insert failed, throw something
}
Run Code Online (Sandbox Code Playgroud)
显然,这可以包装在辅助函数或类中。