0

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

 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 (){} 看起来我只迭代一次?我怎样才能通过所有的interators fullfill

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

非常感谢!

4

2 回答 2

1

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

于 2013-01-15T21:14:40.573 回答
0

您需要为此使用equal_range,例如:

equal_range(*ip);

在此处查看此示例

于 2013-01-15T21:15:36.577 回答