优先级队列top()分段错误

时间:2017-07-07 15:40:53

标签: c++11 segmentation-fault priority-queue

我正在尝试解决此问题https://www.hackerrank.com/challenges/ctci-find-the-running-median

我只通过了一个测试用例。我试图通过打印中间值来调试。 最后,我试图打印h2.top()(在代码中提到“问题”),该行给出了分段错误。 h1.top()工作正常。

我不明白为什么只有h2.top()给出了分段错误。 如果可能,任何人都可以指出我的计划中的错误。

int main() {

int n, ele;
int temp;
int c = 0;
cin >> n;

priority_queue<int> h1 = priority_queue<int, vector<int>, less<int> >();  //max_heap
priority_queue<int,vector<int>,greater<int> > h2 = priority_queue<int, vector<int>, greater<int> >();  //min_heap

for(int a_i = 0;a_i < n;a_i++) {
   cin >> ele;
    if(h1.empty())
        h1.push(ele);
    else if(ele <= h1.top()) {
        if(h1.size() <= h2.size())
            h1.push(ele);
        else {
            temp = h1.top();
            h1.pop();
            h2.push(temp);
            h1.push(ele);
        }
    }
    else{
        if(h2.size() < h1.size())
            h2.push(ele);
        else {
            temp = h2.top();
            h2.pop();
            h1.push(temp);
            h2.push(ele);
        }
    }    
    c++;
   if(c & 1 == 1) {
        if(h1.size() > h2.size())
            cout<<fixed<<setprecision(1)<<(float)h1.top()<<endl;
        else
            cout<<fixed<<setprecision(1)<<(float)h2.top()<<endl;
    }
    else
        cout<<fixed<<setprecision(1)<<(h1.top()+h2.top())/2.0<<endl;
    cout<<c<<" h1: "<<h1.top()<<"  "<<h1.size();
    cout<<"\n  h2:"<<h2.top()<<"  ";  //problem
    //cout<<h2.top();
    cout<<h2.size()<<"\n\n";
}
//cout<<h1.size();
return 0;
}

0 个答案:

没有答案