如何从multimap中冗余项目

时间:2013-01-15 21:01:30

标签: c++ set multimap redundancy

我有一些文件,如下所示我需要删除多图

 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

.....

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

我有

 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(){}它看起来像我只有迭代器一次?  我怎么能通过所有的interator完成

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

非常感谢!

2 个答案:

答案 0 :(得分:1)

你可以使用equal_range函数给你一对迭代器到你计算平均值的范围。

答案 1 :(得分:0)

您需要使用equal_range,例如:

equal_range(*ip);

检查this example here