Я пытаюсь прочитать файл и поместить значения в мультикарту multimap.Вставка не выдает никаких ошибок, но когда я пытаюсь напечатать значения, вывод не такой, как ожидалось.
Мой входной файл:
Сервер1, База данных, MySQL, 5.5
Сервер2, База данных, MySQL, 5.1
Сервер2, ОС, Ubuntu, 12.04
Сервер3, Язык, Python, 2.6.3
Я хочу сохранить значения следующим образом:
MySQL, 5.5, Server1
MySQL, 5.1, Server2
Мой код:
#include<bits/stdc++.h>
using namespace std;
typedef multimap<string,string> innermap;
multimap<string,innermap> mp;
void print()
{
multimap<string, innermap >::iterator it;
multimap<string, string>::iterator inner_it;
for ( it=mp.begin() ; it != mp.end(); it++ )
{
cout<<(*it).first<<endl;
for( inner_it=(*it).second.begin(); inner_it != (*it).second.end(); inner_it++)
cout << (*inner_it).first<<" " << (*inner_it).second << endl;
}
}
int main()
{
string str_temp;
vector<string>str;
std::ifstream infile("abc.txt");
while ( getline (infile,str_temp) )
{
int i=0;
stringstream ss(str_temp);
char delim=',';
string server;
string software;
string version;
string item;
while (getline(ss,item,delim))
{
i++;
if(i==1)
server=item;
else if(i==3)
software=item;
else if(i==4)
version=item;
//else
// i++;
}
cout<<"server "<<server<<"software "<<software<<"version "<<version<<endl;
multimap<string, innermap >::iterator it;
it=mp.insert(make_pair(software,innermap()));
it->second.insert(make_pair(version,server));
//print();
}
print();
return 0;
}
Я отладил свой код, и значения были прочитаны правильно из моего файла перед вставкой.Но когда я звоню print()
, все версии, кроме одной, отсутствуют:
MySQL
Сервер1
MySQL
Сервер2
Python
2.6.3 Сервер3
Ubuntu
Server2
Почему не печатаются все строки версий?