先说结论:用map统计字符串字符时,可以直接++map[c],而不必事先判断pair<c,*>是否存在于map中。
map<char, int> m;
cout << m.count('f') << endl; //0,表示以f为key的pair数量为0
cout << (m.find('f')!=m.end()) << endl;//0,表示没有以f为key的pair
cout << m['f'] << endl; //0,但意思和上面就不同了
//当我们调用m['f'],实际上插入了<'f',0>到map里,其中0是int的默认值,所以此处输出的0是pair的second
cout << m.count('f') << endl; //1,上一句隐式插入了<'f',0>
m['f']++; cout << m['f'] << endl; //1
++m['f']; cout << m['f'] << endl; //2
string str("bacaa");
for (auto c : str)
++m[c];
for (auto p : m)
cout << p.first << ":" << p.second << endl;
输出:
a:3
b:1
c:1
map是排序的,尽管b先插入,但是还是a在前面