#include <map>
#include <vector>
#include <string>
#include <fstream>
#include <sstream>
#include <iomanip>
#include <iostream>
using namespace std;
//1946 12 30 0 -519 0 -490 0 9999 9 0 2 0
struct FILE_DATA
{
int year;
int month;
int day;
int param4;
int param5;
int param6;
int param7;
int param8;
int param9;
int param10;
int param11;
int param12;
int t;
};
string data =
"1946 12 30 0 -519 0 -490 0 9999 9 0 2 0\n"
"1946 12 31 0 -528 0 -499 0 9999 9 0 2 0\n"
"1947 1 1 0 -477 0 -383 0 -366 0 1 0 0\n"
"1947 1 2 0 -406 0 -356 0 -335 0 5 0 0\n"
"1947 1 3 0 -481 0 -408 0 -373 0 0 2 0\n";
int main()
{
int n = 0;
FILE_DATA pDATA = {0};//Теперь нам нужна всего 1-на структура
//Заменим наш укащатель на массив на карту (мапу)
map<int, FILE_DATA> mymap;
map<int, FILE_DATA>::iterator it;//итератор (типа счётчика)
stringstream ss(data);//Инициализируем стрингпоток поток
//Выделяем память под первую структуру массива
for(n = 0;!ss.eof(); )
{
if
(ss>>pDATA.year
>>pDATA.month
>>pDATA.day
>>pDATA.param4
>>pDATA.param5
>>pDATA.param6
>>pDATA.param7
>>pDATA.param8
>>pDATA.param9
>>pDATA.param10
>>pDATA.param11
>>pDATA.param12
>>pDATA.t
)
{
//вот так добавлем в карту элемент
//и не думаем о динамическом выделении памяти
mymap.insert(make_pair(n,pDATA));
n = n + 1;//увеличиваем счётчик структур
}
}
if(n == 0)
cout<<"File input.txt not contain correct data"<<endl;
else
{
cout<<"Totlal count of read structures "<<n<<endl;
//здесь у нас массив структур из n элементов
//далее делам с ним что душе угодно
//Показываю как читать карту
for(it = mymap.begin(); it != mymap.end(); it++)
{
pDATA = (*it).second;
cout<<setw(4)<<pDATA.year<<" "
<<setw(2)<<pDATA.month<<" "
<<setw(2)<<pDATA.day<<" "
<<pDATA.param4<<" "
<<pDATA.param5<<" "
<<pDATA.param6<<" "
<<pDATA.param7<<" "
<<pDATA.param8<<" "
<<pDATA.param9<<" "
<<pDATA.param10<<" "
<<pDATA.param11<<" "
<<pDATA.param12<<" "
<<pDATA.t<<endl;
}
}
cout<<"Enter any key for exit"<<endl;
getchar();
return 0;
}