获得"error C2039: 'value_type' : is not a member of 'std::greater<_Ty>'"
Getting "error C2039: 'value_type' : is not a member of 'std::greater<_Ty>'"
我对以下代码有一些问题
#include<iostream>
#include<iomanip>
#include<fstream>
#include<vector>
#include<stack>
#include<queue>
#include<cstring>
#include<functional>
#include<algorithm>
using namespace std;
struct node
{
int weight;
unsigned char value;
const node * child0;
const node *child1;
node(unsigned char c=0,int i=-1){
value=c;
weight=-1;
child0=0;
child1=0;
}
//construct new internal node that has children c1 and c2
node (const node* c0,const node *c1){
value=0;
weight=c0->weight+c1->weight;
child0=c0;
child1=c1;
}
bool operator<(const node &a) const {
return weight<a.weight;
}
void traverse(char * code=" " ) const;
};
void node::traverse(char * code ) const
{
if(child0)
{
child0->traverse(code +'0');
child1->traverse(code +'1');
}
else
{
cout<<" "<<value <<" ";
cout<<setw(2)<<weight;
cout<<" "<<code<<endl;
}
}
void count_chars(int *counts)
{
for (int i=0;i<256;i++)
counts[i]=0;
//ifstream file( "input.data");
//if(!file){
//cerr<<" couldnt open input file!n";
//throw "abort";
//file.setf(ios::skipws);
unsigned char c;
while(true)
{
cin>>c;
if(c){
counts[c]++;
}
else
break;
}
}
int main()
{
int counts[256];
count_chars(counts);
priority_queue<vector<node>,greater<node> >q;
for(int i=0;i<256;++i)
if(counts[i])
q.push(node(i,counts[i]));
while(q.size()<1)
{
node *child0=new node(q.top());
q.pop();
node *child1=new node(q.top());
q.pop();
q.push(node(child0,child1));
}
cout<<" char Symbol code "<<endl;
q.top().traverse();
return 0;
}
但它向我展示了一些错误。例如,priority_queue的未知大小等等
1>------ Build started: Project: HUffman_coding, Configuration: Debug Win32 ------
1> HUffman_coding.cpp
1>c:program filesmicrosoft visual studio 10.0vcincludequeue(212): error C2039: 'value_type' : is not a member of 'std::greater<_Ty>'
1> with
1> [
1> _Ty=node
1> ]
1>c:program filesmicrosoft visual studio 10.0vcincludequeue(212): error C2146: syntax error : missing ',' before identifier 'value_type'
1>c:program filesmicrosoft visual studio 10.0vcincludequeue(212): error C2065: 'value_type' : undeclared identifier
1>c:usersdavitidocumentsvisual studio 2010projectshuffman_codinghuffman_codinghuffman_coding.cpp(100): error C3203: 'less' : unspecialized class template can't be used as a template argument for template parameter '_Pr', expected a real type
1>c:usersdavitidocumentsvisual studio 2010projectshuffman_codinghuffman_codinghuffman_coding.cpp(100): error C2955: 'std::less' : use of class template requires template argument list
1> c:program filesmicrosoft visual studio 10.0vcincludexfunctional(121) : see declaration of 'std::less'
1>c:usersdavitidocumentsvisual studio 2010projectshuffman_codinghuffman_codinghuffman_coding.cpp(100): error C2133: 'q' : unknown size
1>c:usersdavitidocumentsvisual studio 2010projectshuffman_codinghuffman_codinghuffman_coding.cpp(100): error C2512: 'std::priority_queue' : no appropriate default constructor available
1>c:usersdavitidocumentsvisual studio 2010projectshuffman_codinghuffman_codinghuffman_coding.cpp(103): error C2663: 'std::priority_queue<_Ty,_Container,_Pr>::push' : 2 overloads have no legal conversion for 'this' pointer
1>c:usersdavitidocumentsvisual studio 2010projectshuffman_codinghuffman_codinghuffman_coding.cpp(104): error C2662: 'std::priority_queue<_Ty,_Container,_Pr>::size' : cannot convert 'this' pointer from 'std::priority_queue' to 'const std::priority_queue<_Ty,_Container,_Pr> &'
1> Reason: cannot convert from 'std::priority_queue' to 'const std::priority_queue<_Ty,_Container,_Pr>'
1> Conversion requires a second user-defined-conversion operator or constructor
1>c:usersdavitidocumentsvisual studio 2010projectshuffman_codinghuffman_codinghuffman_coding.cpp(104): fatal error C1903: unable to recover from previous error(s); stopping compilation
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
我也认识到了,当我试着做这样的q.top().traverse()
后的顶部。它没有显示遍历选项。怎么了?
我认为这不是
priority_queue<vector<node>,greater<node> >q;
你想写:
priority_queue<node, vector<node>, greater<node> >q;
这应该可以解决你目前看到的错误。
正如我所建议的,请正确格式化您的代码。这将使所有内容都更容易阅读,并可能使收到答案的可能性更大。
相关文章:
- 使用std::multimap迭代器创建std::list
- C++中std::resize(n)和std::shrink_to_fit之间的区别
- 来自 std::list 的迭代器 .end() 按预期返回"0xcdcdcdcdcdcdcdcd"但 .begin()
- C++17复制构造函数,在std::unordereded_map上进行深度复制
- 如何导出包含具有"std::unique_ptr"值的"std::map"属性的
- 替换 std::greater 和其他
- C++:为什么 std::greater<T>() 包含在 iostream 中?
- std::greater 在 std::p riority_queue 中的行为是什么?
- 如果 std::greater<>,那么为什么是 std::less(而不是 std::lesser<>)?
- std::greater<int>() 预期 0 个参数(或 1 个参数),提供 2 个,为什么?
- 什么是“std::greater”或“std::less_equal”的类型
- 获得"error C2039: 'value_type' : is not a member of 'std::greater<_Ty>'"
- <K> <K> 在三元中使用 std::greater 和 std::greater_equal
- boost::bind如何与std::greater和std::less_equal一起工作?
- std::greater<int>()(100, 300),为什么它有效?
- 使用' std::greater '通过' priority_queue '创建最小堆的原因
- std::greater在MSVC2012中未定义
- c++ 11对std::greater和std::less的条件表达式得到了不同类型的错误
- 复制/分配STL模板,std::less和std:greater
- 形参使用std::greater或std::less作为实参