0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

rustの連想配列の値部分にベクタを入れる方法

Posted at

概要

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]}

}

なかなか難しい。

0
0
2

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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?