#迭代器 #排序 #迭代器适配器 #滑动 # #滑动窗口

window-sort-iterator

一个在滑动窗口内对项目进行排序的迭代器适配器

1 个不稳定版本

0.1.0 2022年6月1日

#1763算法

MIT 许可证

9KB
107 代码行

window-sort-iterator

Crates.io Crates.io Released API docs

一个在滑动窗口内对项目进行排序的迭代器适配器。

实现

这将在迭代器顶部保持一个滑动窗口内项目的 二叉堆。算法工作原理如下

  • 只要窗口未满,就请求从底层迭代器获取元素并将其插入堆中。
  • 如果窗口已满,则从堆中弹出下一个排序元素。
  • 如果底层迭代器不再产生任何项目,则按顺序从堆中移除剩余元素。

默认情况下,这使用最大堆,结果是最高的项目首先产生。您可以通过使用 std::cmp::Reverse 来使用最小堆。

用法

use window_sort_iterator::WindowSortIterExt;

let a = &[4, 2, 3, 1];
let mut it = a.iter().cloned().window_sort(2);
assert_eq!(Some(4), it.next());
assert_eq!(Some(3), it.next());
assert_eq!(Some(2), it.next());
assert_eq!(Some(1), it.next());
assert_eq!(None, it.next());

许可证

MIT,见 LICENSE

无运行时依赖