如何解决C++ 优先级队列 - 何时重新平衡堆?
查看C++ priority_queue API,用户提供的Compare
只指定了重排序规则,没有指定何时加强排序。
例如,假设我使用 priority_queue 来获取字符串中字符的最大出现次数。
假设字符串是 "cab"
,priitu_queue 现在有 c,1
。现在我想插入 a,1
,然后插入 b,1
:
auto cmp = [&](const char& letter1,const char& letter2) {
return v[letter1 - 'a'] < v[letter2 - 'a'];
};
priority_queue<char,vector<char>,decltype(cmp)> q{cmp};
提供严格弱排序的比较类型。 请注意,Compare 参数被定义为如果其第一个参数在弱排序中出现在其第二个参数之前,则它返回 true。但是,因为优先级队列先输出最大的元素,所以“先来”的元素实际上是最后输出的。也就是说,队列的最前面是按照弱排序包含“最后”的元素
这是否意味着上述操作将返回 b
(因为 b,1
排在最后,并且 PQ 中的所有三个元素都被相等地计数,因此弱排序)?
如果是这样,获得 a
(字母顺序)的唯一方法是我重写 cmp
以强制它考虑字母顺序,除了字符出现计数?
PS,我确实尝试过自己实验:https://onlinegdb.com/YDjOcABJh
这是我用来测试是b
来还是c
先来的代码,实验结果是c
,不是b
!
我现在对 API 的措辞感到困惑,感谢任何帮助!
谢谢!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。