所以我有一个循环类似于
for (r = 0; r < k; r++) {
pair p = {r, D[r]};
queue.push(p);
}
其中对定义为
struct pair {
int u;
float d;
}
这是创建 k 对并将它们推入优先级队列的合法方式吗?即使 p 每次都被覆盖,这些对是否仍以其原始形式存在于队列中?还是已经在队列中的每一对都自动更新为 p 的新值,从而导致队列中充满了同一对的相同副本?
谢谢!
所以我有一个循环类似于
for (r = 0; r < k; r++) {
pair p = {r, D[r]};
queue.push(p);
}
其中对定义为
struct pair {
int u;
float d;
}
这是创建 k 对并将它们推入优先级队列的合法方式吗?即使 p 每次都被覆盖,这些对是否仍以其原始形式存在于队列中?还是已经在队列中的每一对都自动更新为 p 的新值,从而导致队列中充满了同一对的相同副本?
谢谢!
代码很好。
p
被复制到队列中;复制完成后原件会发生什么并不重要。
是的,您的代码按原样工作。的默认复制构造函数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]));
}
这样一来,您就更清楚地知道您是在故意推送副本。另外,请确保您;
的结构声明结束后有一个!如果您忘记了,最终可能会出现一些神秘的编译器错误。