【发布时间】:2017-04-02 16:18:20
【问题描述】:
在下面给出的代码中,我试图将priority_queue 中的一些值按照它们的键值进行排序,这些键值存储在“键”向量中。然后,我正在更改键值以查看比较器是否正常工作。在这里,当我将 key[8] 更改为 10 时,值 8 会正确更改其在队列中的位置。但是当我将 key[2] 更改为 -1 时,它改变了它在队列中的位置,但不正确。它应该位于队列的顶部,因为它的键值是最小的,但事实并非如此。
我写比较器代码的方式有错吗?或者,我做错了什么?
如果我想根据键值对值进行升序排序,我想知道修改优先级队列比较器的正确方法。
#include <bits/stdc++.h>
using namespace std;
vector <int> key(1000);
struct comp{
bool operator()(int a,int b)const{
return key[a]>key[b];
}
};
int main()
{
priority_queue <int,vector<int>,comp> q,temp;
for(int a=0;a<10;a++){
int n=rand()%16;
key[a]=n;
q.push(a);
}
while(!q.empty()){
temp=q;
while(!temp.empty()){
cout<< temp.top() << "(" << key[temp.top()] << ") ";
temp.pop();
}
cout<<endl<<endl;
int u,v;
cin>> u >> v;
key[u]=v;
}
return 0;
}
【问题讨论】:
-
你从哪里养成了可怕的
#include <bits/stdc++.h>习惯?这是一个严肃的问题。直到大约一年前,初学者才这样做。 -
在提问时最好不要在图片中包含代码。
-
有什么问题吗?我实际上用它来节省编程比赛的时间。 @Hackl
-
Why should I not #include <bits/stdc++.h>? 和 Why is “using namespace std” considered bad practice?。它们一起使用时,几乎将整个标准库放入全局命名空间中。这意味着突然之间在全局命名空间中有很多名称非常常见的标识符,它们可能会与程序的标识符发生冲突并替换它们。
-
@user4581301:如果您真的打算雇用一个完整的初学者来培训他或她的工作,这只是一个问题。如果您正在寻找高级开发人员,我认为使用这样的过滤器没有任何问题。审核工作申请需要时间和金钱。
标签: c++ c++11 priority-queue comparator