C++ priority_queue

  1. 头文件

    #include <queue>
    
  2. 自定义比较函数

    1. lambda (c++11)
      注意使用关键字decltype
      auto comp = [origin]( Point a, Point b ) {
          auto aDis = distanceSquare(a, origin);
          auto bDis = distanceSquare(b, origin);
          if (aDis == bDis) {
              if (a.x == b.x) {
                  return a.y < b.y;
              } else {
                  return a.x < b.x;
              }
          } else {
              return aDis < bDis;
          }
      };
      priority_queue<Point, vector<Point>, decltype(comp)> q(comp);
      
    2. 结构体 TBD
       struct cmp{
              bool operator() ( Point a, Point b ){
                  if( a.x== b.x ) return a.y> b.y;
                  return a.x> b.x; 
              }
      };
      priority_queue<Point, vector<Point>, cmp> q();
      
    3. 重载操作符
      struct node  
      {  
          friend bool operator< (node n1, node n2)  
          {  
              return n1.priority < n2.priority;  
          }  
          int priority;  
          int value;  
      };  
      
  3. 排列顺序
    使用<时大的内容具有较高优先级

Reference

http://blog.csdn.net/yuanjilai/article/details/8043157
https://stackoverflow.com/questions/5807735/c-priority-queue-with-lambda-comparator-error

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容