有什么问题?
当我使用STL的优先级队列时,我想使用min heap,所以我使用了如下代码。
它适用于默认选项但不适用于"更高选项" 。
总是如上图所示。我完全不知道为什么会这样。
struct node {
string code;
int fre;
bool operator<(const node& rhs) const {
return fre < rhs.fre;
}
bool operator>(const node& rhs) const {
return fre > rhs.fre;
}
};
std::priority_queue<node, vector<node>, greater<node>> q;
std::map<node,int> huffman_tree;
int main(void)
{
int f;
for (int i = 1; i <= n; i++) {
string c;
std::cin >> c >> f;
node huffman = { c,f };
q.push(huffman);
}
q.pop();
return 0;
}
答案 0 :(得分:1)
如果我正确理解您的问题,您正在查看调试器中的优先级队列,并且对于为什么队列中的项目未按您期望的顺序存储而感到困惑。
优先级队列不保证按优先级顺序存储项目。当您将它们从队列中弹出时,它们只保证按优先顺序返回项目。将项目保持在优先级顺序意味着每次新项目放入队列时都必须执行排序操作,这将是低效的。相反,优先级队列通常使用称为堆的数据结构来管理队列,这样可以更有效地插入队列。