1
3

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 5 years have passed since last update.

RustのVecをキーとしてHashMapを初期化するコードで初心者が詰まった点

Last updated at Posted at 2019-06-02

初心者なのでやっていく.

  • やりたいこと
    • 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と書く必要があるのか分からない
1
3
4

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
1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?