std :: map中的重复项

时间:2016-09-04 10:55:47

标签: c++ c++11 dictionary std stdmap

我们的产品中有一段代码,它使用std :: map来存储数据,其关键是boost :: make_tuple(std :: string,std :: string)。在调试问题时,我发现在映射中插入键值对后,在映射中找到该键导致为负,并且另一次尝试插入键值1对成功。

这说明了操作顺序:

Flow A:

Key k = boost::make_tuple(str1, str2);
bool added = temp_map_.insert(std::make_pair(k, val)).second;

Flow B:

TempMap::iterator itr = temp_map_.find(k);
if (itr == temp_map_.end()) {
    Key k = boost::make_tuple(str1, str2);
    bool added = temp_map_.insert(std::make_pair(k, val1)).second;
}

请注意,流程A在流程A完成后开始。

第一个'插入'成功。 '发现'找不到密钥,第二个'插入'也成功了。最终,'擦除'对密钥的操作成功,随后发现'在地图中找到关键字。

我没有这方面的复制品,但是当我的产品在重复运行某个测试时发生这种情况,比如大约6-7次。

关于如何发生这种情况的任何想法?

0 个答案:

没有答案