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(){}を使用した場合、イテレータは1回だけのように見えますか?どうすればすべてのインターレーターを完全に通過できますか

    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 に答える