初心者なのでやっていく.
- やりたいこと
- Vec型でHashMapのキーにしたい要素が与えられる
- HashMapを与えられたキーに対して初期化したい
最初に書いたコード
- for文のところでおいている i が &usizeになってしまい,insertできない
use std::collections::HashMap;
use bit_set::BitSet;
fn main() {
let list_of_keys: Vec<usize> = vec![0, 1, 2, 3];
let mut map: HashMap<usize, BitSet> = HashMap::new();
for i in &list_of_keys {
map.insert(i, BitSet::new());
}
println!("{:?}", map);
}
とりあえず解決するために書いたコード2種
- 動作理由はよく分からなかったけど,&つけたら動いた(悪い)
for &i in &list_of_keys {
map.insert(i, BitSet::new());
}
- VS CodeのRSを見ると,この i は &usizeですよーと出てくるので,逆に*を付けて実体化(
正しい日本語か不明(コメントから追記)これをdereferencing=参照外しと呼ぶ)すると動いた
for i in &list_of_keys {
map2.insert(*i, BitSet::new());
}
よく分からないこと
- 例えばinsertじゃなくてprintln!()にするとiみたいにしなくてもiを自動でreferenceを取ってくれるのに,mapにinsertする(コピーする?)ときにiと書く必要があるのか分からない