所以我有一个类似
的循环for (r = 0; r < k; r++) {
pair p = {r, D[r]};
queue.push(p);
}
其中pair被定义为
struct pair {
int u;
float d;
}
这是创建k对并将其推送到优先级队列的合法方式吗?即使p每次被覆盖,这些对仍然以原始形式存在于队列中吗?或者已经在队列中的每一对是否自动更新为p的新值,从而导致队列中充满相同副本的相同副本?
谢谢!
答案 0 :(得分:4)
代码很好。
p
将复制纳入队列;复制完成后,原件发生了什么并不重要。
答案 1 :(得分:1)
是的,您的代码按原样运行。调用p
的默认复制构造函数,并将副本推送到queue
。但是,您可以通过添加构造函数来简化代码。如果您将pair
定义为:
struct pair {
pair(int u_, float d_) : u(u_), d(d_){}
int u;
float d;
};
然后在你的循环中,你可以简单地做:
for (r = 0; r < k; r++) {
queue.push_back(pair(r, D[r]));
}
这样,你有意识地推送副本就更清楚了。另外,请确保在结构声明结束后有;
!如果你忘了,你最终可能会遇到一些神秘的编译器错误。