我在合并重叠的区间
五、十二、一、八、十四、十九、二十二、二十八、二十五、二十七、二十七
所以我使用的逻辑是pair〈int,int〉template但是我不能把pair元素压入Stack〈pair〈int,int〉〉,因为我压入的是(&int,&int)而不是(int,int)。
#include <iostream>
#include <algorithm>
#include <vector>
#include <stack>
using namespace std;
void mergeOverlappingIntervals(vector<vector<int>> &arr){
vector<pair<int,int>> v;
for(int i=0;i<arr.size();i++){
v.push_back(make_pair(arr[i][0],arr[i][1]));
}
sort(v.begin(),v.end());
// for(auto x:v){
// cout<<x.first<<" "<<x.second<<endl;
// }
stack<pair<int,int>> st;
st.push(v[0].first,v[0].second);
for(int i=1;i<v.size();i++){
int top = st.top();
if(v[i].first <= top.second){
top.second = max(top.second,v[i].second);
}
st.push(v[i].first,v[i].second);
}
while(!st.empty()){
int top = st.top();
cout<<top.fist << " " << top.second<<endl;
st.pop();
}
}
int main() {
int n;
cin>>n;
vector<vector<int>> arr(n, vector<int>(2,0));
for(int i=0;i<n;i++){
cin>>arr[i][0];
cin>>arr[i][1];
}
mergeOverlappingIntervals(arr);
return 0;
}
1条答案
按热度按时间l7wslrjt1#
你一定是误解了错误信息。由于你没有包括它,我无法向你解释。
当我尝试编译时,我得到以下错误消息:
这是因为
std::stack< std::pair<int,int> >::push
只有一个参数,而不是两个。https://en.cppreference.com/w/cpp/container/stack/push你可以使用
std::make_pair
,就像你在压入向量时一样,实际上压入向量类似于压入堆栈,尽管在这两种情况下你都不需要std::make_pair
,只需要添加一对{}
来构造这个对:或者你也可以使用
emplace
,它接受参数,然后转发给elements构造函数。