как избыточный элемент из мультикарты

У меня есть какой-то файл, как следующий, мне нужно удалить мультикарту

 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() ;

Большое спасибо!

0

Решение

Вы можете использовать equal_range функция, которая даст вам пару итераторов для диапазона, из которого вы будете вычислять средние значения.

1

Другие решения

Вам нужно использовать equal_range для этого вроде:

equal_range(*ip);

Проверьте этот пример здесь.

0

По вопросам рекламы [email protected]