У меня есть какой-то файл, как следующий, мне нужно удалить мультикарту
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 () {}, похоже, я только один раз итератор?
как пройти через все интеграторы заполнить
multimap<string,struct1> ::iterator i = m. find(*ip) && i != m.end() ;
Большое спасибо!
Вы можете использовать equal_range
функция, которая даст вам пару итераторов для диапазона, из которого вы будете вычислять средние значения.