一种常见的情况是,在一个函数中维护最大值 && 返回最大值对应的情况。
常见的写法是
...
if cur > _max:
ans = new_ans
_max = cur
...
return ans
虽然可以接受,但是非常丑。而且涉及了赋值操作。
import queue
pq = queue.PriorityQueue()
...
pq.put((cur, new_ans))
...
return pq.queue[0][-1]
利用 cur 作为 key 往大小 = 1 的 pq 里塞东西。(每次塞完就弹,弹剩下的就是要的)(pq 是升序)
c++ 可以往 pq 里传入 cmp。但是 cpp 的 pq 没有 maxsize 选项。
突发奇想,假如 pq 的构造函数使用
std::array
#include <queue>
#include <array>
auto pq = std::priority_queue<int, std::array<int , 1>>{};
int main(){
pq.push(1);
pq.push(1);
return 0;
}
报错,查得知
C++报错原因汇总 Q1:为什么error: 'class std::queue<Person>' has no member named 'pop_back
_0dayI 若谷的博客-CSDN博客
pq 用的 push 背后调用了容器的 push_back
方法。 std::array
没有。
def f():
...
yield (cur, new_ans)
...
max(f(), key=itemgetter(0))[-1]