You are viewing a single comment's thread. Return to all comments →
using namespace std;
class Message { private: string text; static int id; int current_id; public: Message() { current_id = ++id; } Message(string t){ current_id = ++id; text=t; } const string& get_text() { return text; } // overloaded < operator bool operator < (const Message& M2) { if(current_id < M2.current_id) return true; else return false; } }; int Message::id = 0;
class MessageFactory { public: MessageFactory() {} Message create_message(const string& text) { Message m = Message(text); return m; } };
class Recipient { public: Recipient() {} void receive(const Message& msg) { messages_.push_back(msg); } void print_messages() { fix_order(); for (auto& msg : messages_) { cout << msg.get_text() << endl; } messages_.clear(); } private: void fix_order() { sort(messages_.begin(), messages_.end()); } vector messages_; };
class Network { public: static void send_messages(vector messages, Recipient& recipient) { // simulates the unpredictable network, where sent messages might arrive in unspecified order random_shuffle(messages.begin(), messages.end()); for (auto msg : messages) { recipient.receive(msg); } } };
int main() { MessageFactory message_factory; Recipient recipient; vector messages; string text; while (getline(cin, text)) { messages.push_back(message_factory.create_message(text)); } Network::send_messages(messages, recipient); recipient.print_messages(); }
Seems like cookies are disabled on this browser, please enable them to open this website
Messages Order
You are viewing a single comment's thread. Return to all comments →
include
include
include
using namespace std;
class Message { private: string text; static int id; int current_id; public: Message() { current_id = ++id; } Message(string t){ current_id = ++id; text=t; } const string& get_text() { return text; } // overloaded < operator bool operator < (const Message& M2) { if(current_id < M2.current_id) return true; else return false; } }; int Message::id = 0;
class MessageFactory { public: MessageFactory() {} Message create_message(const string& text) { Message m = Message(text); return m; } };
class Recipient { public: Recipient() {} void receive(const Message& msg) { messages_.push_back(msg); } void print_messages() { fix_order(); for (auto& msg : messages_) { cout << msg.get_text() << endl; } messages_.clear(); } private: void fix_order() { sort(messages_.begin(), messages_.end()); } vector messages_; };
class Network { public: static void send_messages(vector messages, Recipient& recipient) { // simulates the unpredictable network, where sent messages might arrive in unspecified order random_shuffle(messages.begin(), messages.end());
for (auto msg : messages) { recipient.receive(msg); } } };
int main() { MessageFactory message_factory; Recipient recipient; vector messages; string text; while (getline(cin, text)) { messages.push_back(message_factory.create_message(text)); } Network::send_messages(messages, recipient); recipient.print_messages(); }