当前位置: 首页 > 知识库问答 >
问题:

cpp中优先级队列的自定义运算符

萧阳波
2023-03-14

使用自定义运算符声明这样的优先级队列时出错

struct compare1{
         bool operator()(Interval &s1,Interval &s2){
             if(s1.start!=s2.start)return s1.start<s2.start;
             return s1.end<s2.end;
         }
     };
priority_queue(Interval,vector<Interval>,compare1)p;

错误-

^/代码/解决方案。cpp:33:32:错误:在“,”令牌优先级_队列(间隔、向量、比较1)p之前应为主表达式;

^/代码/解决方案。cpp:33:49:错误:在“,”令牌优先级_队列(间隔、向量、比较1)p之前应为主表达式^

/code/Solution.cpp:33: 58:错误:预期的主表达式之前')'令牌priority_queue(区间,向量,比较1)p;

我的全部密码

class Solution {
public:
    /**
     * @param intervals: an array of meeting time intervals
     * @return: the minimum number of conference rooms required
     * 
     */
     static bool compare(Interval s1 ,Interval s2){
         if(s1.start!=s2.start)return s1.start<s2.start;
         return s1.end<s2.end;
     }

     struct compare1{
         bool operator()(Interval &s1,Interval &s2){
             if(s1.start!=s2.start)return s1.start<s2.start;
             return s1.end<s2.end;
         }
     };
    int minMeetingRooms(vector<Interval> &intervals) {

        sort(intervals.begin(),intervals.end(),compare);
        priority_queue(Interval,vector<Interval>,compare1)p;
        p.push(intervals[0]);
        int ans = 0;
        for(int i=1;i<intervals.size();i++){
            Interval curr = interevals[i];
            Interval earliest = p.top();
            p.pop();


            if(earliest.end<curr.start){
                earliest.start = min(earliest.start,interevals[i].start);
                earliest.end = max(earliest.end,intervals[i].end);
                pq.push(earliest);
                ans++;
            }
            else{
                p.push(interevals[i]);
            }

        }
        return ans;


    }
};

共有1个答案

劳和雅
2023-03-14

用这个,

priority_queue<Interval,vector<Interval>,compare1> p;
 类似资料:
  • 考虑下面的优先级类声明<代码>类优先级队列 我的想法: 我能想到的一件事是,这将强制优先级队列使用对象比较器,并且不会提供实现其自定义比较器的能力,因为类的用户可能希望基于某个不同的比较器构建队列。

  • priority_queue,comparator(query,d)>min_heap; main.cpp:20:7:注意:“comparator”不是文字,因为: class comparator{ main.cpp:20:7:注意:“comparator”不是聚合,没有普通的默认构造函数,也没有不是复制或移动构造函数的constexpr构造函数 Main.cpp:92:65:注意:应为类型,但

  • 这是我写的Dijkstra算法的代码: 在这方面我不能理解的工作 这涉及到: < code>()运算符在这里有什么用?我是说它在这段代码中是如何运作的? 还有为什么我们使用

  • 我试图实现Prim的算法Java优先级队列。 我找不到我的错误我只是认识到队列没有正确地排列节点。 图表示例: 它始终将节点 4 作为第二个节点。因此,它对队列进行排序,如 [node1, node4, node2, node3],而不是 [node1,node2, node3, node4]。我对优先级队列执行了哪些操作? 问候语

  • 我正在为Dikjstra算法做一个优先级队列。我目前在插入方法上有麻烦。我包含了整个类的代码,以防你需要更好地了解我想完成的事情。我将堆索引放在一个数组列表(heapIndex)中,堆放在另一个数组列表中。 那是我运行程序后的输出(值,优先级,堆索引)。*(-1)表示heapIndex中的空单元格。

  • 我需要一个优先级队列,它首先获得具有最高优先级值的项目。我当前正在使用队列库中的PriorityQueue类。但是,这个函数只先返回值最小的项。我尝试了一些很难看的解决方案,比如(sys.maxint-priority)作为优先级,但我只是想知道是否存在更优雅的解决方案。