[英]Priority Queue Not Sorting
我正在嘗試實現自己的霍夫曼編碼算法,因此C ++ STL的優先級隊列似乎無法正常工作。 我正在從字符串中提取字符,並按照它們在字符串中的出現頻率的順序將它們插入優先級隊列。 代碼可以編譯並正確運行,唯一的問題是樹似乎沒有正確排序。 這是代碼,
class Node {
public:
int freq;
char data;
Node(int &f, char &d) { freq=f; data=d; }
bool operator<(const Node* &n) const { return n->freq < this->freq; }
};
void Init(priority_queue<Node*> &tree, string input) {
map<char,int> probability;
for(int i=0 ; i<input.size() ; i++) {
probability[input[i]]++;
}
map<char,int>::iterator it = probability.begin();
for(it ; it != probability.end() ; it++) {
Node* blah = new Node(it->second, (char&) it->first);
tree.push(blah);
}
}
我究竟做錯了什么?
謝謝
您將指針存儲在priority_queue
,因此這些元素按指針值排序,而不使用operator<
重載。
您要么需要將Node
對象存儲在優先級隊列中,要么需要為優先級隊列編寫一個自定義比較函數,以取消對存儲的指針的引用並比較它們所指向的Node
對象。
由於您詢問“我在做什么錯?”,因此這里有一些其他建議:
operator<
重載應采用const引用,而不是對指針的引用。 Node
構造函數應按值或至少按const引用獲取其參數。 強制轉換(char&)it->first
不好。 讓const
幫助您編寫好的代碼,不要與之抗爭。 Node
對象直接存儲在優先級隊列中,而不是指針中。 using namespace std
; 您應該刪除此代碼並在需要的地方拼出std::
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.