Using a Priority Queue

Started by aruljothi, Jun 11, 2009, 07:25 PM

Previous topic - Next topic

aruljothi

#include <iostream>
#include <queue>
#include <string>

using namespace std;

class Message
{
   public:
   Message( string message = "A",string source = "B", int security_level = 0 );

   bool operator<( const Message& rhs ) const;

   string message() const;
   int security_level() const;
   string source() const;

   private:
   string message_, source_;
   int security_level_;
};

inline
Message::Message( string message, string source, int security_level )
   : message_( message ), source_( source ),
     security_level_( security_level )
{}
bool Message::operator<( const Message& rhs ) const
{  return security_level() < rhs.security_level(); }

string Message::message() const
{  return message_; }

string Message::source() const
{  return source_; }

int Message::security_level() const
{  return security_level_; }

int main( )
{
   const char* message[] = { "A","B", "C","D","E","F","G" };
   const char* source[] = { "a", "b", "c","d", "e", "f", "G" };
   const int security_level[] = { 0, 1, 3, 2, 6, 7, 8 };
   const int num_messages = sizeof( security_level ) / sizeof( security_level[0] );

   priority_queue<Message> messages;

   for( int i = 0; i < num_messages; ++i ){
      cout << "Event " << (i+1) << ": Security level - "
         << security_level << "\n\t" << source << " reports "
         << message << endl;

      messages.push( Message( message, source,security_level ) );
   }

   while( !messages.empty() )
   {
      cout << "Security level - "
         << messages.top().security_level() << "\n\t"
         << messages.top().source() << " reports "
         << messages.top().message() << endl;
      messages.pop();
   }
}