LoginSignup
5
1

More than 1 year has passed since last update.

仕事で使えそうな 競プロ御用達crate紹介

Last updated at Posted at 2022-12-03

前説

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"};

二部探索をサポートしてくれるライブラリです。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));

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が便利。

5
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
1