#include <algorithm>
#include <vector>
class Flight
{
private:
// other variables omitted
static int flightCounter;
int arrivalTime;
int flightNumber;
public:
Flight(int arrival) : // constructor for testing only
arrivalTime(arrival),
flightNumber(++flightCounter)
{}
// other methods omitted
int getArrivalTime() { return arrivalTime; }
int getFlightNumber() { return flightNumber; }
};
int Flight::flightCounter = 0;
bool CompareArrivalTimes(Flight *left, Flight *right)
{
return left->getArrivalTime() < right->getArrivalTime();
}
std::vector<Flight*> SortByArrivalTime(Flight* flightArray, size_t arrayLength)
{
std::vector<Flight*> results;
for(; arrayLength; --arrayLength)
results.push_back(flightArray++);
std::sort(results.begin(), results.end(), CompareArrivalTimes ); // O(N * lg(N)) complexity
return results;
}
#include <iostream>
int main(int argv, char** args)
{
Flight flights[] = {1000, 900, 1630, 1600, 1545, 530, 2200};
size_t numberOfFlights = sizeof(flights)/sizeof(Flight);
std::cout << "Unsorted times" << std::endl;
for(size_t i=0; i < numberOfFlights; ++i)
{
std::cout << "Flight: "<< flights[i].getFlightNumber() << " Arrival Time: " << flights[i].getArrivalTime() << std::endl;
}
std::vector<Flight*> sorted = SortByArrivalTime(flights, numberOfFlights);
std::cout << "Sorted times" << std::endl;
for(size_t i=0; i < numberOfFlights; ++i)
{
std::cout << "Flight: "<< sorted[i]->getFlightNumber() << " Arrival Time: " << sorted[i]->getArrivalTime() << std::endl;
}
}