如图所示
在写小算法,哈夫曼树编码解码。
我尝试着在建树的步骤中使用优先队列,但是在运算符重载后,我发现了一个问题。
运算符重载的是结构体类型,但是优先队列中存储的是指针,在向优先队列中添加了结点后输出权值,输出的却是地址。
随后写了个小demo实验一番,如图所示,结果更奇怪了,在存入三个指针后,输出了两个地址和一个值
这是为什么?
小demo代码
#include <iostream>
#include <queue>
#include <vector>
using namespace std;
struct demo {
int number;
bool operator < (const demo &a) const {
return number<a.number;
}
bool operator > (const demo &a) const {
return number>a.number;
}
//Init
demo() {
number = 0;
}
demo(int num) {
number = num;
}
};
int main() {
//优先队列
priority_queue<demo*, vector<demo*>, greater<demo*> > aaa;
for(int u = 1; u<= 3; u++) {
demo* ddd = new demo(u);
aaa.push(ddd);
delete ddd;
}
//输出所有
while(!aaa.empty()) {
cout << aaa.top()->number << endl;aaa.pop();
}
}
问题已解决,修改后代码为
#include <iostream>
#include <queue>
#include <vector>
using namespace std;
struct demo {
int number;
bool operator < (const demo &a) const { return number<a.number;}
bool operator > (const demo &a) const { return number>a.number;}
//Init
demo() { number = 0;}
demo(int num) { number = num;}
};
int main() {
//优先队列
priority_queue<demo*, vector<demo*>, greater<demo*> > aaa;
demo* ddd = NULL;
for(int u = 1; u<= 3; u++) {
ddd = new demo(u);
aaa.push(ddd);
}
//输出所有
while(!aaa.empty()) {
cout << aaa.top()->number << " ";aaa.pop();
}
}