// Phil Ottewell's STL Course - http://www.pottsoft.com/home/stl/stl.htmlx // // Example 4.3 © Phil Ottewell 1997 // // Purpose: // Demonstrate use of priority_queue container adaptor // by using a task/priority structure // // ANSI C Headers #include // C++ STL Headers #include #include #include #include #include #ifdef _WIN32 using namespace std; #endif class TaskObject { public: friend class PrioritizeTasks; friend ostream & operator<<( ostream &os, TaskObject &task); TaskObject( const char *pname = "", unsigned int prio = 4 ) { process_name = pname; priority = prio; } private: unsigned int priority; string process_name; }; // Friend function for "printing" TaskObject to an output stream ostream & operator<<( ostream &os, TaskObject &task ) { os << "Process: " << task.process_name << " Priority: " << task.priority; return ( os ); } // Friend class with function object for comparison of TaskObjects class PrioritizeTasks { public : int operator()( const TaskObject &x, const TaskObject &y ) { return x.priority < y.priority; } }; int main( int argc, char *argv[] ) { int i; priority_queue, PrioritizeTasks> task_queue; TaskObject tasks[] = { "JAF", "ROB", "PHIL", "JOHN" ,TaskObject("OPCOM",6) , TaskObject("Swapper",16) ,TaskObject("NETACP",8) , TaskObject("REMACP",8) }; for ( i = 0; i < sizeof(tasks)/sizeof(tasks[0]) ; i++ ) task_queue.push( tasks[i] ); while ( !task_queue.empty() ) { cout << task_queue.top() << endl; task_queue.pop(); } cout << endl; return( EXIT_SUCCESS ); }