Wenn fertig, bitte Fenster schließen
// Lösung zu Standard Container // Zum aufsteigenden Sortieren nach Abflugzeiten ARR_TIME_SORT defineren // Ansonsten wird fallend nach der Flugnummer sortiert #define ARR_TIME_SORT // Dateien einbinden #include <iostream> #include <iomanip> #include <string> #include <queue> using std::cout; using std::endl; using std::string; using std::priority_queue; // Klasse für Flugdaten class Flight { string number; // Flugnummer unsigned char arrivalHour; // Ankunftszeit Stunde unsigned char arrivalMinute; // Ankunftszeit Minute #ifdef ARR_TIME_SORT friend struct Ascend; // functor zum Sortieren #endif public: // Standard-ctor, wird von priority_queue benötigt Flight() {} // ctor, erhält Flugnummer und Ankunftszeit Flight(const string& num, unsigned char hour, unsigned char minute): number(num) { arrivalHour = hour; arrivalMinute = minute; } // Zuweisungsoperator Flight& operator = (const Flight& rhs) { number = rhs.number; arrivalHour = rhs.arrivalHour; arrivalMinute = rhs.arrivalMinute; return *this; } // Vergleichsoperatoren für priority_queue friend bool operator < (const Flight& lhs, const Flight& rhs); friend bool operator == (const Flight& lhs, const Flight& rhs); // Überladener Ausgabestream Operator friend std::ostream& operator << (std::ostream& os, const Flight& rhs); }; // friend-Funktionen fur Vergleiche bool operator < (const Flight& lhs, const Flight& rhs) { return lhs.number < rhs.number; } bool operator == (const Flight& lhs, const Flight& rhs) { return rhs.arrivalHour == lhs.arrivalHour && rhs.arrivalMinute == lhs.arrivalMinute; } // Überladener Operator für Ausgabestream inline std::ostream& operator << (std::ostream& os, const Flight& rhs) { os << std::setfill('0'); os << "Flug: " << rhs.number << ", Ankunft: " << std::setw(2) << static_cast<int>(rhs.arrivalHour) << ':' << std::setw(2) << static_cast<int>(rhs.arrivalMinute) << endl; os << std::setfill(' '); return os; } #ifdef ARR_TIME_SORT // Frei definiertes Sortierkriterium zum aufsteigenden Sortieren // nach Ankunftszeiten struct Ascend { bool operator() (const Flight& lhs, const Flight& rhs) const { if (lhs.arrivalHour > rhs.arrivalHour) return true; if (lhs.arrivalHour == rhs.arrivalHour) return lhs.arrivalMinute > rhs.arrivalMinute; return false; } }; #endif // main() Funktion int main() { // Prioritätsqueue definieren #ifdef ARR_TIME_SORT Ascend CmpArrivals; priority_queue<Flight,std::vector<Flight>,Ascend> Arrivals(CmpArrivals); #else priority_queue<Flight> Arrivals; #endif // Flüge in Queue ablegen Arrivals.push(Flight("333",17,38)); Arrivals.push(Flight("111",10,59)); Arrivals.push(Flight("444",10,38)); Arrivals.push(Flight("222",9,0)); // Alle Flüge nun ausgeben und nach der Ausgabe // auch wieder entfernen while (!Arrivals.empty()) { cout << Arrivals.top(); Arrivals.pop(); } } |