擦除C ++映射中包含单个值的键

时间:2014-02-16 18:14:40

标签: c++ map

我有以下地图:

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对象。 我现在要做的是擦除只与一个值相关联的键(只留下映射中的所有重复项),但是我在处理迭代器时遇到了困难。

2 个答案:

答案 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;
    }
  }
}