尝试使用该类的结构中的变量来创建自定义类的优先级队列 [英] Trying to make a priority queue of a custom class using a variable in a struct of that class
问题描述
所以这里是我的类,目标是使bnode的优先级队列顺序,以便具有最低计数的符号的bnode具有最高优先级。这是我的代码:
So here are my classes, the goal is to make a priority queue of bnode that go in order, so that the bnode with the symbol with the lowest count has the highest priority. Here's my code:
struct symbol {
explicit symbol(char av = 0, int ac = 0) : value(av), count(ac) { }
char value; // actual symbol, by default 0 (empty)
int count; // count of the symbol, by default 0
}; // symbol
// compare two symbols
// symbol with a lower count is "less than" symbol with a higher count
inline bool operator<(const symbol& lhs, const symbol& rhs) {
return ((lhs.count < rhs.count) || (!(rhs.count < lhs.count) && (lhs.value < rhs.value)));
} // operator<
template <typename T> struct bnode {
explicit bnode(const T& t = T(), bnode* l = 0, bnode* r = 0)
: value(t), left(l), right(r) { }
T value; // payload
bnode* left; // left child
bnode* right; // right child
}; // struct bnode
#endif // SYMBOL_HPP
//and here is me trying to make a priority queue:
std::priority_queue<bnode<symbol>,std::vector<bnode<symbol> >, std::less<std::vector<bnode<symbol> >::value_type::value> > queue;
这会导致错误:error:'bnode :: value'不能出现在常量表达式
this results in the error: error: ‘bnode::value’ cannot appear in a constant-expression
推荐答案
您的 priority_queue
正在存储 bnode< c>
Your priority_queue
is storing bnode<symbol>
, so you need to provide operator<
for bnode
.
template <typename T>
bool operator<(bnode<T> const& l, bnode<T> const& r)
{
// perform comparison
}
一旦你这样做,就不需要为 priority_queue $提供第二个和第三个模板参数c $ c>,默认值工作。
Once you've done that, there's no need to provide the second and third template arguments for priority_queue
, the defaults work.
std::priority_queue<bnode<symbol> > queue;
或如果您要指定所有模板参数
Or if you want to specify all the template arguments
std::priority_queue<bnode<symbol>,
std::vector<bnode<symbol> >,
std::less<bnode<symbol> > > queue;
这篇关于尝试使用该类的结构中的变量来创建自定义类的优先级队列的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!