fork download
  1. #include <queue>
  2. #include <algorithm>
  3. #include <functional>
  4. #include <iostream>
  5. #include <string>
  6. #include <map>
  7.  
  8. struct SillyJob
  9. {
  10. std::string description;
  11. std::string priority;
  12.  
  13. SillyJob(const std::string& d, const std::string& p)
  14. : description(d), priority(p) { }
  15.  
  16. bool operator<(const SillyJob& sj) const { return description.size() < sj.description.size(); }
  17.  
  18. friend std::ostream& operator<<(std::ostream& os, const SillyJob& sj)
  19. { return os << sj.priority << ": " << sj.description; }
  20. };
  21.  
  22. static bool by_priority(const SillyJob& a, const SillyJob& b)
  23. {
  24. static std::map<std::string, int> prio_map;
  25. if (prio_map.empty())
  26. {
  27. prio_map["HIGH"] = 3;
  28. prio_map["MEDIUM"] = 2;
  29. prio_map["LOW"] = 1;
  30. }
  31.  
  32. return prio_map[a.priority] < prio_map[b.priority];
  33. }
  34.  
  35. int main()
  36. {
  37. std::cout << "Silly: (by description length)" << std::endl;
  38. {
  39. // by description length (member operator<)
  40. std::priority_queue<SillyJob> silly_queue;
  41.  
  42. silly_queue.push(SillyJob("short", "HIGH"));
  43. silly_queue.push(SillyJob("very very long description", "LOW"));
  44.  
  45. while (!silly_queue.empty())
  46. {
  47. std::cout << silly_queue.top() << std::endl;
  48. silly_queue.pop();
  49. }
  50. }
  51.  
  52. std::cout << std::string(60, '-') << "\nNot so silly: (by priority value)" << std::endl;
  53. {
  54. // by description length (member operator<)
  55. typedef bool (*cmpf)(const SillyJob&, const SillyJob&);
  56. typedef std::priority_queue<SillyJob, std::vector<SillyJob>, cmpf> not_so_silly_queue;
  57.  
  58. not_so_silly_queue queue(by_priority);
  59.  
  60. queue.push(SillyJob("short", "HIGH"));
  61. queue.push(SillyJob("very very long description", "LOW"));
  62.  
  63. while (!queue.empty())
  64. {
  65. std::cout << queue.top() << std::endl;
  66. queue.pop();
  67. }
  68. }
  69.  
  70. }
  71.  
Success #stdin #stdout 0s 2872KB
stdin
Standard input is empty
stdout
Silly: (by description length)
LOW: very very long description
HIGH: short
------------------------------------------------------------
Not so silly: (by priority value)
HIGH: short
LOW: very very long description