前説
AtCoderでのRustで使えるcrateで使えそうなものを独断と偏見で紹介します。
Rustのバージョンは結構古いので(v1.42.0)そこはご注意ください。
紹介
Rustで正規表現を使うときのデファクトスタンダードみたいなcrateです。
Rustで乱数を使うときのデファクトスタンダードみたいなcrateです。
この辺は有名すぎるかなということでさらっと流します。
hashmapやhashsetをmacroで作ることができるcrateです。
let map = hashmap!{
"a" => 1,
"b" => 2,
};
let set = hashset!{"a", "b"};
- superslice
https://crates.io/crates/superslice
二部探索をサポートしてくれるライブラリです。vecにもbinary_searchというメソッドがありますが、さがす値が複数配列にあった場合どれが取れるかが不確定だったり、見つからないとerrorが返ってくるというのがあります。
このcrateの場合は複数あった場合は左端、なかった場合は右端を返すという挙動をします。また複数あった場合にその範囲をとるメソッドなどもあります。
let s = [0, 1, 1, 1, 2, 3, 5];
assert_eq!(1, s.lower_bound(&1));
assert_eq!(4, s.upper_bound(&1));
assert_eq!(1..4, s.equal_range(&1));
- itertools
https://crates.io/crates/itertools
Iteratorを拡張するcrateでかなり多機能で便利です。vecとiteratorのメソッドをそれぞれ使うために型を反復横跳びする手間をぐっと減らしてくれます。
iterのままユニークにしたり、ソートしたりや
let i = [1, 6, 9, 3, 5, 6].iter();
i.clone().unique();
sorted(i);
組み合わせの列挙などもできます。
let i = [1, 6, 9].iter();
i.clone().combinations(2);
i.permutations(2);
まとめ
itertoolsが便利。