实现一个 MapSum 类里的两个方法,insert 和 sum。
对于方法 insert,你将得到一对(字符串,整数)的键值对。字符串表示键,整数表示值。如果键已经存在,那么原来的键值对将被替代成新的键值对。
对于方法 sum,你将得到一个表示前缀的字符串,你需要返回所有以该前缀开头的键的值的总和。
示例 1:
输入: insert(“apple”, 3), 输出: Null
输入: sum(“ap”), 输出: 3
输入: insert(“app”, 2), 输出: Null
输入: sum(“ap”), 输出: 5
map对键自动排序,使用lower_bound函数找到第一个前缀,开始遍历,保证查询字符串始终是在键的头部(刨除asapple这种值),满足要求可以累加。
class MapSum {
public:
map<string,int>findmap;
MapSum() {
}
void insert(string key, int val) {
findmap[key]=val;
} //map对key排序
int sum(string prefix) {
int valsum=0;
//it是个迭代器,it->first是键,it->second是值
//findmap.lower_bound(prefix)是以prefix为前缀的最小键值对
for (auto it = findmap.lower_bound(prefix); it != findmap.end();it++){
//it指向最小键值对,开始遍历
if (it->first.find(prefix)==0)
//当在it->first中find到子字符串prefix时返回地址表示是否从首字母开始
valsum += it->second;
//满足条件累加
}
return valsum;
}
};