如何从multimap中获取冗余项

how to redundant item from a multimap

本文关键字:获取 冗余 multimap      更新时间:2023-10-16

我有一些文件,像下面我需要删除一个multimap

 3KHJG 76  238
 3KHJG 86  238
 3GDMB 31  244
 3GDMB 31  247
 3GDMB 31  251
 3KOFA 21  336
 3KOFA 36  263

我需要得到一个文件,如:

 3KHJG 81  238
 3GDMB 31  247

//保留字符串键并计算下一列的平均值;

i have

 typedef struct S{
   int v1;
   int v2;
   ...
   }struct1;
struct1 s1;                 
//I parsed the old file and put them into a multimap and a set<string>;
multimap <string, s1> m;
multimap <string, s1>::iterator i;
set <string> pa_set;
int sumv1, sumv2;
int avgv1, avgv2;
for (set<string>:: iterator ip= pa_set.begin(); ip !=pa_set.end(); ip++)
{
  multimap <string, struct1> ::iterator i = m.find(*ip);
       int cnt=m.cout(*ip);
       if (ip != m.end())
      { 
        v1 =i->second.v1;
        v2 =i->second.v2;
        sumv1+=v1;
        sumv2+=v2;
        i++;
      }
      //calculate the avgv1 and avgv2;
}

然而,如果我使用if(){},它看起来像我只迭代一次?如何遍历所有的交互器fullfill

    multimap<string,struct1> ::iterator i = m. find(*ip) && i != m.end() ;        

非常感谢!

您可以使用equal_range函数,该函数将为您提供一对迭代器,用于计算平均值的范围

您需要使用equal_range,如:

equal_range(*ip);