首页 > 解决方案 > 常量表达式中的非文字类型“比较”

问题描述

为priority_queue构建我自己的比较类,但是,我无法弄清楚为什么消息一直显示非文字类型

如果你想看看我的代码在做什么,这里是描述:

将 K 个已排序的区间列表合并为一个已排序的区间列表。您还需要合并重叠间隔。

class compare {
private:
    vector<vector<Interval>> tmp;
public:
    compare (vector<vector<Interval>> &intervals) {
        tmp = intervals;
    }
    bool operator() (const pair<int, int> &a, const pair<int, int> &b) {
        return tmp[a.first][a.second].start > tmp[b.first][b.second].start;
    }
};


class Solution {
public:
    vector<Interval> mergeKSortedIntervalLists(vector<vector<Interval>> &intervals) {
        priority_queue<pair<int, int>, vector<pair<int, int>>, compare(intervals)> pq;

        for (int i = 0; i < intervals.size(); i++) {
            if (!intervals[i].empty()) {
                pq.push(make_pair<i, 0>);
            }
        }
        vector<Interval> res;
        while(!pq.empty()) {
            pair<int, int> node = pq.top();
            pq.pop();
            res.push_back(intervals[node.first][node.second]);
            node.second++;
            if(node.second < intervals[node.first].size()) {
                pq.push(make_pair(node.first, node.second));
            }
        }
        return mergeInterval(res);
    }

private:
    vector<Interval> mergeInterval (vector<Interval> &res) {
        if(res.empty() || res.size() == 1) return res;
        vector<Interval> ans;

        int start = res[0].start;
        int end = res[0].end;
        for (auto interval : res) {
            if(interval.start <= end) {
                end = max(interval.end, end);
            }else {
                ans.push_back({start, end});
                start = interval.start;
                end = interval.end;
            }
        }
        ans.push_back({start, end});
        return ans;
    }

};

错误消息:常量表达式priority_queue,vector>,compare(intervals)> pq中的非文字类型'compare'的临时;

标签: c++c++14

解决方案


我看到代码有两个问题:

  1. priority_queue<pair<int, int>, vector<pair<int, int>>, compare(intervals)> pq;应该 priority_queue<pair<int, int>, vector<pair<int, int>>, compare> pq{compare(intervals)};

  2. make_pair<i, 0>应该make_pair(i, 0)

至少它可以编译


推荐阅读