我有以下地图:
void groupIntoClasses (vector<FileData>fd, map<int,vector<FileData>> &classes )
{
classes.clear();
for (int i=0; i<fd.size(); i++)
{
string name = fd[i].fileName;
string path = fd[i].filePath;
string hash = fd[i].fileHash;
int size = fd[i].fileSize;
classes[size].push_back( {name,path,size,hash});
}
}
根据字段fileSize匹配我的每个FileData对象。 我现在要做的是擦除只与一个值相关联的键(只留下映射中的所有重复项),但是我在处理迭代器时遇到了困难。
答案 0 :(得分:1)
如果我了解你,那么你可以编写以下循环来完成任务。
for ( auto it = classes.cbegin(); it != classes.cend(); )
{
if ( (*it).second.size() == 1 ) it = classes.erase( it );
else ++it;
}
答案 1 :(得分:0)
也许是这样的:
void eraseSingleEntries(map<int,vector<FileData> > &classes)
{
map<int,vector<FileData> >::iterator i = classes.begin();
while (i!=classes.end()) {
if (i->second.size()==1) {
classes.erase(i++);
}
else {
++i;
}
}
}