次のようなファイルがありますマルチマップを削除する必要があります
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() ;
どうもありがとう!