CPallini
Попробуйте также
#include <iostream>
#include <vector>
#include <utility>
#include <map>
#include <numeric>
using namespace std;
int main()
{
vector < pair < int, double> > vp;
multimap<int, double> mm;
string line;
getline(cin, line); // skip header line
for (;;)
{
int id,z;
double tke, y, yerror;
cin >> id >> z >> tke >> y >> yerror;
if ( ! cin ) break;
mm.emplace( id, y);
}
auto it_begin = mm.begin();
while (it_begin != mm.end() )
{
auto it_end = mm.upper_bound(it_begin->first);
auto sumfun = [] (double a, pair < int, double> p) {return a + p.second;};
double sum = accumulate(it_begin, it_end, 0.0, sumfun);
vp.push_back( make_pair(it_begin->first, sum));
it_begin = it_end;
}
cout << "id ysum" << endl;
for (auto p : vp)
cout << p.first << " " << p.second << endl;
}
Запустите его, перенаправив файл данных в качестве стандартного ввода.
Используется со следующими входными данными
A Z TKE Y Yerror
118 46 140.0 0.3326E-03 0.6799E-04
118 45 140.0 0.9057E-04 0.1851E-04
118 47 140.0 0.9122E-04 0.1864E-04
119 46 140.0 0.7077E-04 0.2217E-04
119 45 140.0 0.5748E-05 0.1800E-05
119 47 140.0 0.6486E-04 0.2032E-04
120 47 140.0 0.3259E-03 0.7113E-04
120 46 140.0 0.1016E-03 0.2217E-04
120 48 140.0 0.7759E-04 0.1694E-04
Он производит выход
id ysum
118 0.00051439
119 0.000141378
120 0.00050509
Member 14621201
Это выглядит идеально, я попытаюсь связать с открытым файлом, поэтому спрошу, какой файл открыть, и вернусь к вам, если у меня возникнут проблемы...
Member 14621201
хорошо, поэтому я переименовал свой файл вместо cf.h все еще получаю некоторые ошибки:
ошибка C2059: синтаксическая ошибка: 'constant'
ошибка C2143: синтаксическая ошибка: отсутствует ';' перед '{'
ошибка C2065: 'mm': необъявленный идентификатор
ошибка C3536: 'it_end': не может быть использован до его инициализации
ошибка C2065: 'vp': необъявленный идентификатор
ИСПОЛЬЗУЕМЫЙ КОД:
"#include<iostream>
#включить<stdio.h>
#include<stdlib.h>
#включить<math.h>
#включить<time.h>
код #include "conio размещен.ч"
код #include "ctype для.ч"
#включить "string.h"
#включить <вектор>
#включить <утилиту>
#включать
#include <numeric>
#включить "cf.h"
#включить <iomanip>
#включить <fstream>
использование пространства имен std;
тап_п()
{
//getline(cin, line); // пропустить строку заголовка
для (;;)
{
int id,z;
двойной tke, y, yerror;
Кин &ГТ;&ГТ; ИД &ГТ;> З &ГТ;&ГТ; тке &ГТ;&ГТ; г &ГТ;&ГТ; yerror;
если ( ! cin ) сломается;
мм. установить ("идентификатор", г);
}
авто it_begin = мм. начать();
пока (it_begin != мм. конец() )
{
авто it_end = мм. объектом upper_bound(it_begin-&ГТ;первый);
авто sumfun = [] (двойной, пара И Л; int, двойной&ГТ; п) {возвращение а + р.второй;};
двойная сумма = накопить(it_begin, it_end, 0.0, sumfun);
ВП.push_back( например, make_pair(it_begin-и gt;Во-первых, сумма));
it_begin = it_end;
}
соиь <&ЛТ; "ИД ysum" на << епси;
для (auto p : vp)
соиь <&ЛТ; п.первый &ЛТ;&ЛТ; "" &ЛТ;&ЛТ; п.второй на << епси;
}"