Извеждане на съдържанието на сложен multimap
Автор |
|
anonymousВто, 06.05.08, 12:11 |
то взе че стана по твоя начин /без толкова ponter-u/. Въпреки, че не ми харесва, така се компи и скача като тигър вътре ще видиш колко елементарно излъгах компилатора. сега вече трябва да нямаш проблем #include <cstdlib>
#include <iostream>
#include <map>
using namespace std;
class CPlane {
public:
string brand;
unsigned hours;
};
class CAirtravel{
public:
string company, nation;
map <CPlane, unsigned> plane;
multimap <string, unsigned> destination;
void print() {
map <CPlane, unsigned>::iterator iter;
multimap <string, unsigned>::iterator iter2;
cout<<endl<<"Name of the company: "<<company<<endl;
cout<<endl<<"Nationality: "<<nation<<endl;
for(iter = plane.begin(); iter != plane.end(); iter++) {
cout<<endl<<"Plane's brand: "<<iter->first.brand<<endl;
cout<<endl<<"Flight hours: "<<iter->first.hours<<endl;
cout<<endl<<"Flight destinations: "<<iter->second<<endl;
}
for(iter2 = destination.begin(); iter2 != destination.end(); iter2++) {
cout<<endl<<"Destination: "<<iter2->first<<endl;
cout<<endl<<"Flights: "<<iter2->second<<endl;
}
return;
}
};
class CAirport {
public:
string name;
unsigned flight;
multimap <CAirtravel, unsigned> airtravel;
void info() {
multimap <CAirtravel, unsigned>::iterator m;
CAirtravel tmp;
cout<<endl<<"Name of airport: "<<name<<endl;
cout<<endl<<"Flight number: "<<flight<<endl;
cout<<endl<<"Data of companies:"<<endl;
for(m = airtravel.begin(); m != airtravel.end(); m++) {
cout<<endl<<"Company: "<<m->first.company<<endl;
cout<<endl<<"Nationality: "<<m->first.nation<<endl;
cout<<endl<<"Number of flights: "<<m->second<<endl;
tmp = m->first;
tmp.print();
}
return;
}
};
int main(void){
CAirport bla;
bla.info();
system("PAUSE");
return EXIT_SUCCESS;
} |
| | anonymousВто, 06.05.08, 13:35 |
void info() {
multimap <CAirtravel, unsigned>::iterator m;
CAirtravel* tmp=NULL;
cout<<endl<<"Name of airport: "<<name<<endl;
cout<<endl<<"Flight number: "<<flight<<endl;
cout<<endl<<"Data of companies:"<<endl;
for(m = airtravel.begin(); m != airtravel.end(); m++) {
tmp=NULL;
cout<<endl<<"Company: "<<m->first.company<<endl;
cout<<endl<<"Nationality: "<<m->first.nation<<endl;
cout<<endl<<"Number of flights: "<<m->second<<endl;
(*tmp) = m->first;
if (tmp!=NULL) tmp->print();
}
return;
} |
| | anonymousВто, 06.05.08, 14:57 |
Човек, направо разби задачата, благодаря отново Въпреки че при стартиране на програмата ми изкарва Application Error - The memory could not be read, реших просто да сменя указателя към обект с истински обект и предифинирах оператора = за обекти CAirtravel: CAirtravel operator=(CAirtravel ob) {
company = ob.company;
destination = ob.destination;
plane.swap(ob.plane);
nation.swap(ob.nation);
return *this;
}
void info() {
multimap <CAirtravel, unsigned>::iterator iair = airtravel.begin();
CAirtravel tmp;
cout<<"Airport: "<<name;
cout<<"nFlight number: "<<flight;
cout<<"nnData of companies:";
for(; iair != airtravel.end(); iair++) {
tmp = iair->first;
tmp.print();
cout<<"nnNumber of all company's flights: "<<iair->second<<endl<<endl;
system("pause"); system("cls");
}
} |
Oткрих и сериозна грешка при четенето на данните от файла: while(!in.eof()) {
in>>sx>>sy>>np;
for(int i = 0; i < np; i++) {
in>>ta>>tb>>tc;
sa.push_back(ta); ub.push_back(tb); uc.push_back(tc);
}
in>>nd;
for(i = 0; i < nd; i++) {
in>>td>>te;
sd.push_back(td); ue.push_back(te);
}
in>>broi;
airtravel.insert(make_pair(CAirtravel(sx, sy, np, sa.begin(), ub.begin(), uc.begin(), nd, sd.begin(), ue.begin()), broi));
sa.clear(); ub.clear(); uc.clear(); sd.clear(); ue.clear(); //
/*Бях забравил да изчиствам съдържанието на векторите преди новия цикъл. */
} |
След като оправих това, проработи и тромавият ми вариант на info(), където използвам две временни карти за извеждането. Задачата е далеч от готова, но благодарение на koko5 се вижда краят й редактиран от anonymous на 06.05.08 15:03 редактиран от anonymous на 06.05.08 15:04 | | anonymousВто, 06.05.08, 16:59 |
Хм, сега пък ми се налага да преброя уникалните елементи в multimap-а destination<string, unsigned>. Сещам се за алгоритмите unique и unique_copy, но незнам как работят с multimap. | | anonymousВто, 06.05.08, 17:18 |
по същия начин, както е дадено за vector::iterator. Стойностите са в *(result_iterator->first/second) Edit:И аз не съм работил с това, ама там ще е цъкцъкцъкцък редактиран от anonymous на 06.05.08 17:32 | | anonymousВто, 06.05.08, 17:57 |
multimap <string, unsigned> temp;
multimap <string, unsigned> :: iterator iter;
iter = unique_copy(destination.begin(), destination.end(), temp.begin());
int uni = temp.size(); |
Нещо такова ми се иска да направя, но компилаторът реве | | anonymousСря, 07.05.08, 20:16 |
Курсовата работа е готова най-сетне, благодаря още веднъж на koko5 Предоставям и пълния код, може да помогне на някой: source.cpp | | Коментар |