vector<int> matchingStrings(vector<string> s, vector<string> q) {
vector<int> res;
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]];
}
return res;
}
uj5u.com熱心網友回復:
該問題是你有一個空載體和寫作:
res[i];
您正在嘗試訪問其i不存在的第 th 個元素。您可以通過使用on來解決這個push_back問題res,如下所示:
res.push_back(mp[q[i]]);//you could use emplace_back here instead
此外,我想在這里給出 2 條建議:
使用
.at()替代[]的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;
}
替代解決方案:
創建res為特定大小。
vector<int> res(q.size());//res has size equal to q's size
現在您可以res[i];安全地使用,無需使用push_back和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;
}
uj5u.com熱心網友回復:
除了@Anoop Rana 的回答之外,我認為您還可以通過使用std::count(Since c 17)來減少對給定函式進行編碼的作業量。
std::vector<int> matchingStrings(const std::vector<string>& s, const std::vector<string>& q) {
std::vector<int> ret{};
ret.reserve(q.size());
for(auto& str: q)
ret.emplace_back(std::count(s.begin(), s.end(), str));
return ret;
}
注意:使用const std::vector<string>&matchingStrings時可以避免復制值
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/356555.html
