如何解决如何从multimap <int,std :: pair <int,bool >>中删除重复的元素?
我有一个重复的多重地图。当我完成元素的收集后,我想删除公仔。
这是容器:
std::multimap<int,std::pair<int,bool>> container;
下面的代码在迭代内(这是原始代码的简单版本)
container.emplace(LeafId,std::make_pair(NodeId,isElectronic));
这是一个好的解决方案吗?
std::pair<int,bool>> lastValue {-1,{-1,-1}};
for (auto it = container.cbegin(); it != container.cend();)
{
if (it->first == lastValue.first && it->second == lastValue.second)
{
it = container.erase(it);
} else
{
lastValue = *it;
++it;
}
}
解决方法
这是一个好的解决方案吗?
除非您保持内部对在多图内排序,否则,它不是一个好的解决方案,因为它将丢失重复项。如果可以更改数据类型,则可以使用:
std::map<int,std::vector<std::pair<int,bool>>>
代替std::multimap
,然后对每个元素排序向量,并使用此处介绍的标准算法Removing duplicates in a vector of strings
如果不能,我建议使用其他std::set
或std::unordered_set
:
std::set<std::pair<int,bool>> tset;
int lastValue = 0;
for (auto it = container.cbegin(); it != container.cend();)
{
if( it->first != lastValue ) {
tset.clear();
lastValue = it->first;
}
if( !tset.insert( it->second ).second )
it = container.erase( it );
else
++it;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。