概要
https://atcoder.jp/contests/abc235/tasks/abc235_c
を解く際に連想配列の値部分にベクタを入れたいがちょっと考えてあんまり思いつかなかったので
メモ
連想配列とは
この辺参照
https://qiita.com/garkimasera/items/a6df4d1cd99bc5010a5e
今回の場合はhashmapもしくはbtreemap のどちらかでよさそうです
違いはキーは大小の比較ができるもの、つまりOrdを実装している型である必要があります。ということだが
なんかよくわからん。ハッシュテーブル:メモリ大、早い B木:メモリ小、遅い
くらいの気持ちでいればよいか。計算量がO(1)、O(logn)らしくどっちでも行けそうなので
B木でとりあえず実装してみる
本題
というわけでbtreemapを使う。ハッシュテーブルでも行けそう。
やり方としてはキーをstring、値をベクタの型として BTreeMapを用意して
entryでキーを指定してinsertでベクタを呼び出す。値を追加したければpushしていけばよい
# ![allow(unused)]
fn main() {
use std::collections::BTreeMap;
let mut map: BTreeMap<&str, Vec<usize>> = BTreeMap::new();
map.entry("1").or_insert(vec![0,1]);
map.entry("2").or_insert(vec![0,1]);
map.entry("3").or_insert(vec![0,1]);
println!("{:?}",map.entry("1").or_insert(vec![]));
///[0, 1]
map.entry("1").or_insert(vec![0,2]).push(4);
println!("{:?}",map.entry("1").or_insert(vec![]));
///[0, 1, 4]
println!("{:?}",map)
///{"1": [0, 1, 4], "2": [0, 1], "3": [0, 1]}
}
なかなか難しい。