2

所以我有一个循环类似于

for (r = 0; r < k; r++) {
    pair p = {r, D[r]};
    queue.push(p);
}

其中对定义为

struct pair {
    int u;
    float d;
}

这是创建 k 对并将它们推入优先级队列的合法方式吗?即使 p 每次都被覆盖,这些对是否仍以其原始形式存在于队列中?还是已经在队列中的每一对都自动更新为 p 的新值,从而导致队列中充满了同一对的相同副本?

谢谢!

4

2 回答 2

4

代码很好。

p复制到队列中;复制完成后原件会发生什么并不重要。

于 2012-11-28T19:53:00.477 回答
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]));
}

这样一来,您就更清楚地知道您是在故意推送副本。另外,请确保您;的结构声明结束后有一个!如果您忘记了,最终可能会出现一些神秘的编译器错误。

于 2012-11-28T20:05:18.077 回答