Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/134.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 优先级队列错误_C++_Stl_Priority Queue - Fatal编程技术网

C++ 优先级队列错误

C++ 优先级队列错误,c++,stl,priority-queue,C++,Stl,Priority Queue,我遇到了麻烦,每当我试图编译这个程序时,我都会在contains函数中得到一个错误,其中显示q.pop。如果该行被注释掉,它将可以编译,但它仍然给出错误的值。出于某种原因,它总是错误的 错误是: priority\u queue\u demo.cpp:在函数“int main()”中: 优先级\u队列\u demo.cpp:54:12:错误:从“int”到“const char*”的转换无效[-fppermissive] /usr/lib/gcc/x86_64-redhat-linux/4.6.

我遇到了麻烦,每当我试图编译这个程序时,我都会在contains函数中得到一个错误,其中显示q.pop。如果该行被注释掉,它将可以编译,但它仍然给出错误的值。出于某种原因,它总是错误的

错误是:
priority\u queue\u demo.cpp:在函数“int main()”中:
优先级\u队列\u demo.cpp:54:12:错误:从“int”到“const char*”的转换无效[-fppermissive]
/usr/lib/gcc/x86_64-redhat-linux/4.6.1/../../../../../../../../include/c++/4.6.1/bits/basic_string.tcc:214:5:错误:初始化'std::basic_string::basic_string(const_CharT*,const_Alloc)][with _CharT=CharT,_Traits&=std::char Traits,_Alloc=std::char分配器].[-fpermissive]
priority_queue_demo.cpp:在函数“bool contains(const std::priority_queue&,T)[带T=int,typename std::vector::value_type=int]”中:
优先级队列演示。cpp:43:47:从此处实例化
priority_queue_demo.cpp:27:3:错误:将'const std::priority_queue'作为'void std::priority_queue::pop()[with _Tp=int,_Sequence=std::vector,_Compare=std::less]'的'this'参数传递将丢弃限定符[-fppermissive]

#包括
#包括
#包括
#包括
使用名称空间std;
模板

ostream&operator问题在于您正在向队列传递一个
const
引用,但是
pop()
显然不是
const
操作,因为它会改变队列

您应该传递一个非常量引用:

bool contains(priority_queue<T>& q, T val) { .... }
你可能是说

qi.push(arr[i]);

注意您的
ostream&operator过载代码中有几个问题:

priority_queue<string> qs;

    for(int i = 0; i < ARR_SIZE; i++)
            qs.push(i);  //<<<<Error, should be arr[i]
priority_队列qs;
对于(int i=0;iqs.push(i)// 我以前做过一个评论,但是你的代码还有其他问题,这些问题不适合评论

1)
qs
是一个
priority_队列
,但您正在将
int
s推送到它(在
qs.push(i)
行中);我想你想做的是推
arr[I]
。因此,替换

qs.push(i);

2)模板函数
包含
按常量引用获取
优先级队列
。这意味着您不能在
q
上调用非
const
方法。特别是,您不能调用
q.pop()
,因为
pop()
是一个非常量方法。(实际上,此方法预期会更改队列。)因此,替换

template <typename T>
bool contains(const priority_queue<T> &q, T val) {
模板
bool包含(常数优先级队列&q,T值){

模板
bool包含(优先级、队列和q、T值){

编译器错误消息是什么?您的代码还有其他问题。例如,
qs
是一个
priority\u队列
,但您正在将
int
s推到它(在
qs.push(i)
行中)。另一个错误是
qs.push(i)
其中
i
是一个
int
qs
priority\u queue
。这很好,但现在它在主行中给了我一个错误,在主行中它说priority\u queue qs;@FJam,这可能是因为您正在将int推入其中。请参见编辑。是的,函数应该采用非常量引用。它的名称应该是更改为
撕裂\u分开\u队列\u查找\u元素
。好的,谢谢,我让它工作了,但是contains函数仍然给我错误的答案。它对两个值都说false。
qs.push(i);
qs.push(arr[i]);
template <typename T>
bool contains(const priority_queue<T> &q, T val) {
template <typename T>
bool contains(priority_queue<T> &q, T val) {