https://www.geeksforgeeks.org/default-values-in-a-map-in-c-stl/
C++에서 map자료구조는 처음 선언 될 때는 empty하다.
하지만, [] 등으로 조회가 되는 경우, key가 없다면, (e.g map<int,int> mpp; mpp[1]; )
초기 자료형태를 기존에 가지고 있던 것 처럼, 즉 python의 defaultdict처럼 동작한다. 위의 mpp example에서는 int 자료구조의 0을 이미 가지고 있었던 것처럼 act 할 것이다.
https://stackoverflow.com/questions/2667355/mapint-int-default-values
실제로 아래 두 코드는 동일한 형태로 동작하는 것을 확인 할 수 있다.
input : 영어 대소문자로 이루어진 문자열
output : 해당하는 문자열의 각 알파벳의 등장횟수
[Compile]
g++ -o test test.cpp -std=c++11
[코드 1]
#include <iostream>
#include <cctype>
#include <algorithm>
#include <map>
using namespace std;
int main(){
string s;
cin >> s;
transform(s.begin(), s.end(), s.begin(), ::tolower);
map<char, int> s_map;
for(int i = 0; i < s.length() ; i++){
s_map[s[i]]++;
}
for(map<char, int>::iterator it = s_map.begin();
it != s_map.end(); ++it)
{
std::cout << it->first << " " << it->second<< "\n";
}
}
[코드 2]
#include <iostream>
#include <cctype>
#include <algorithm>
#include <map>
using namespace std;
int main(){
string s;
cin >> s;
transform(s.begin(), s.end(), s.begin(), ::tolower);
map<char, int> s_map; // todo : study unoredered map..
for(int i = 0; i < s.length() ; i++){
if (s_map.find(s[i]) == s_map.end()) {
// not found
s_map[s[i]] = 1;
} else {
// found
s_map[s[i]]++;
}
}
for(map<char, int>::iterator it = s_map.begin();
it != s_map.end(); ++it)
{
std::cout << it->first << " " << it->second<< "\n";
}
}
반응형
'공부 > C++' 카테고리의 다른 글
[C++] vector [], at 속도차이와 고찰 (0) | 2022.08.21 |
---|