создаю свой собственный класс сравнения для 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>, сравнить (интервалы)> pq;