c++ - 常量表达式中的非文字类型“比较”
问题描述
为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'的临时;
解决方案
我看到代码有两个问题:
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)};
make_pair<i, 0>
应该make_pair(i, 0)
至少它可以编译。
推荐阅读
- javascript - 从 swf 获取数据
- docker - 为什么我的 Nginx 反向代理执行 301 重定向而不是代理?
- sql - 具有 group by 和 join 两个表的 Sql 子查询
- c# - 使用另一个注入的 C++ 库从注入的 C# 调用方法
- javascript - 在普通 javascriot 中使用类“.something”移动所有元素
- mysql - 从日期范围中选择时防止 MySQL 使用临时表
- node.js - 更改节点支持网站前端使用的脚本文件
- python - Django - 为模板自定义颜色的字符串
- jenkins - 试图让 Jenkins 在 Github 存储库上构建时间。有没有简单的方法来实现这一目标?
- python - 数组上的广播掩码操作