The problem你有一个空向量并写:
res[i];
你正在尝试访问它的i
th 不存在的元素。
你可以solve这通过使用push_back
on res
如下:
res.push_back(mp[q[i]]);//you could use emplace_back here instead
另外我想在这里给出两个建议:
-
Use .at()
代替[]
on the std::map
每当您不想创建无意的元素时。
-
在这种情况下你也可以使用emplace_back
代替push_back
.
考虑到建议的第 2 点,您可以将上述建议的语句写为:
res.emplace_back(mp[q[i]]); //use .at() only if you don't want to create/add elements into the map and just want to read
所以修改后的代码将如下所示:
vector<int> matchingStrings(vector<string> s, vector<string> q) {
vector<int> res;//res is an empty vector
map<string, int> mp;
for(int i = 0 ; i < s.size();i++){
mp[s[i]]++;
}
for(int i = 0 ; i < q.size();i++){
res.emplace_back(mp[q[i]]); //used emplace_back
}
return res;
}
替代解决方案:
Create res
具有特定的尺寸。
vector<int> res(q.size());//res has size equal to q's size
现在你可以使用res[i];
安全并且有no need to use push_back
and emplace_back
.
所以修改后的代码将如下所示:
vector<int> matchingStrings(vector<string> s, vector<string> q) {
vector<int> res(q.size());//res has size q
map<string, int> mp;
for(int i = 0 ; i < s.size();i++){
mp[s[i]]++;
}
for(int i = 0 ; i < q.size();i++){
res[i] = mp[q[i]]; //res[i] is fine now
}
return res;
}