unordered_map
簡単に言うとキーとそれに対応した値を保持するハッシュ連想配列。
これは、同じキーは保持できないというもの。今回はそれに目を付けた。
というか正直At〇oderで、そんな使い方する!?ってなって面白かったので備忘録的な。
内容
文字列を取得して、同じ文字列が何個あったか調べるもの。
そのために、同じキーは保持できないという特徴を利用して、unordered_mapに保存できなかったら値を加算するという方法を使う。
やり方は簡単で、
キーに文字列、値にintとする。取得した文字列がすでに保持しているか調べ、保持していたら該当するキーの値の数値を加算する。
保持されていなければ、取得した文字列を追加する。
そんな感じで作ったコードがこれ。ちょっと弄った。
知らないだけかもしれないけど、追加する際に既にキーがあれば何か返すようなものがあるならそれを使った方が楽かもね。
#include <iostream>
#include <string>
#include <unordered_map>
int main()
{
int N = 0;
std::cin >> N;
std::string s;
std::unordered_map<std::string, int> un;
for (int i = 0; i < N; ++i)
{
std::cin >> s;
if (un.find(s) != un.end())
{
un.at(s)++;
}
else
{
un.insert({ s, 0 });
}
}
for (auto n : un)
{
std::cout << n.first << ": " << n.second << "\n";
}
return 0;
}