Magicode logo
Magicode
3

Rust✖️競プロ 覚え書きまとめ

はじめに

Rust と AtCoder を勉強するうちに「これよく使うな」と思った処理をまとめていきます!

随時更新していきます!

同じ要素の数を数える(Counter)

HashMap から key: K で指定した値を Entry として取り出します。

Entry が空の場合は default: V を挿入します。その後 Entry の値への参照を返します。


{'k': 2, 'u': 1, 's': 3, 'a': 3, 'i': 1}

アルファベットを列挙する

AtCoder の環境では、'a'..'c' のようにアルファベットの Range を作ることが出来ません。

そのため、以下のようにすると良いです。


a
b
c
d

同じ値で埋めた Vec を作る


[0, 0, 0, 0, 0]

型の最大値・最小値で初期化する

std::T::MIN, std::T::MAX のようにします。


isize: -9223372036854775808 ~ 9223372036854775807

符号なし整数の引き算で桁溢れを回避する

符号なし整数の最小値は当然 00 なので、引き算の結果負の数になるとエラーが発生します。


Error
this arithmetic operation will overflow
attempt to compute `1_u8 - 5_u8`, which would overflow
this arithmetic operation will overflow

saturating_sub() を使用すると、計算結果は型の最小値・最大値の中に抑えこまれます。つまり、usize 同士の引き算で負になる場合、最小値の 00 になるということです。


0

Vec<f64>, Vec<f32> をソートする

Vec<f64>Vec<f32> をソートしようとすると、以下のようにエラーが発生します。


Error
the trait bound `f64: Ord` is not satisfied
a.sort();
^^^^ the trait `Ord` is not implemented for `f64`
the trait bound `f64: Ord` is not satisfied

こうしましょう。


[0.1, 0.3, 0.8]

お手軽素数判定


503
509
521
523
541
547
557
563
569
571
577
587
593
599

Discussion

コメントにはログインが必要です。