maikiichanのブログ

いろいろ

Rustでプライオリティキューを扱う

RustにはC++でいうstd::priority_queue的なものとしてstd::collection::BinaryHeapが存在する。 使い方はC++や他言語のqueueと一緒だが、Option型を返すので少し気を使う必要がある。

以下サンプル

use std::collections::BinaryHeap;

fn main() {
    let mut heap = BinaryHeap::new();
    heap.push(3);
    heap.push(1);
    heap.push(5);

// unwrap()を使うパターン。あまり行儀がよくない(競技プログラミングでは使うかもしれない)
    println!("{}", heap.pop().unwrap()); // => 5

    // if letでアンラップするパターン。
    if let Some(n) = heap.pop() {
        println!("{}", n) // => 3
    }

     // パターンマッチ。
    match heap.pop() {
        Some(n) => println!("{}", n),  // => 1
        None => unreachable!(),
    }
}