我正在尝试解决一个特定的 leetcode 问题,但我似乎无法弄清楚我哪里出错了。
问题是这个:https://leetcode.com/problems/group-anagrams/ 我的代码是:
class Solution {
public:
vector<vector<string>> groupAnagrams(vector<string>& str) {
unordered_map<string, vector<int>> map;
vector<string> newstr = str;
int size = str.size();
//pushing those indices of `str` into the map which share common permutation
for(int i=0; i<size; i++){
sort(newstr[i].begin(), newstr[i].end());
map[newstr[i]].push_back(i);
}
vector<vector<string>> ans;
int i=0;
for(auto itr: map){
int v_size = itr.second.size();
for(int j=0; j<v_size; j++)
//cout<<str[itr.second[j]]<<" "; //this query works perfectly
ans[i].push_back(str[itr.second[j]]); //erroneous code
i++;
}
return vector<vector<string>>();
// return ans;
}
};
最佳答案
您正在访问 ans[i]
而没有事先在 ans
中分配任何内存。这会创建一个超出 vector 边界 (0) 的数据访问。
如果您打算向 ans 添加一个新 vector ,请使用 ans.push_back()
。正如 balki 所说,您还可以通过在声明时分配所有条目来删除冗余分配,如下所示:
vector<vector<string>> ans { map.size() };
这将使您的代码无需任何额外更改即可工作(据我所知)。
关于c++ - vector 插入期间引用绑定(bind)到空指针错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55172006/