判断 map 容器是否存在某 key 的方法
m.find(key) != m.end();
return m[key]
对于一个 map 容器,先判断键值是否存在,就直接返回,恰因为不会保错,返回 Value 的默认值,而容易引发逻辑错误。
需首先判断 key 是否存在,可用 find() 判断是否存在该 key:
m.find(key) == m.end();
所以:
assert(m.find(key) != m.end());
return m[key];
map.count(key) 判断某 key 是否在字典中
map.count(key):统计某 key 出现的次数,因为字典不允许 key 重复,显然返回值为 0/1,为 0 表示不在字典中,不可直接访问,为 1 表示键在字典中,可访问。
map<string, int> m;
cout << m["China"] << endl;
// 显然会引发键错误
if (m.count("China"))
cout << m["China"] << endl;
嵌套字典(字典的字典)的插值(insert)
所谓嵌套字典,即 key 对应的 value 其 value type 继续为字典的容器。
map<int, map<int, pair<int, string>>> m;
map<int, pair<int, string>> tmp;
tmp.insert(make_pair(1, make_pair(2, "zch")));
m.insert(make_pair(0, tmp));