あいまいまいんの生物学

あいまいまいんの生物学

生物学が好き。勉強したり遊んだり。

日頃感じたこと思ったこと、出来事など

勉強して面白かった話

授業で使えそうな生物学の知識・雑談・小ネタ

などなどを紹介していきたいと思います

コメント大歓迎!気軽にコメントして下さい

ゲームサイトはこちら

プログラミング mapの復習など

ABC 073 C - Write and Erase

今回はmapの復習をしました。

一度実装しても忘れがち…

 

mapはキーとそれに対応する値を格納できるものなのだそうで、

map<"キーの型","値の型"> 名前;

という形でmapを作ることができます。型は、intとかstringとか…

私が今の所使ったのは「入力された中の要素の数を数えるためのmap」。

 

先に、「入力に対し初見の要素ならキーを作成し、既視の要素なら値を1増やす」という関数を定義します。

 

void increment (map<int, int>& m, int i) {

auto itr = m.find(i); //itrはmの中でキーiを探す矢印

if (itr != m.end()) { //矢印がmのキーの中で最後まで行かない時(つまりどこかで「見つけた!」と止まった時

itr->second += 1; //その矢印が指すキーに対応する値に1を足す

} else {

m[i] = 1; //矢印が最後まで行ってしまう(つまりキーがない)時キーと、それに対応する値として1を作る

}

}

 

と、こんな感じ。

これで、main関数の方で increment("マップ名","キー"); と入れるだけで同じ行為をどんなmap、どんなキーにもさせることができます。

こうして作ったmap内の各要素に対し、例えば「あるキーの値が奇数ならカウントせよ」などとさせたいときには

int count = 0;

for(auto&&kv:m){

if(kv.second%2==1) ++count;

}

とこうするとカウントできます。

 

 

mapではないけれど他の問題も。

AGC 020 A - Move and Win

これは驚きの簡単さでした…main関数の中身が最短4行で終わる。