我试图在哈希时用C ++编写代码。为此,我试图将字符串推入向量的向量中。但它显示出分段错误。
#include <bits/stdc++.h>
using namespace std;
int main() {
int n,ind,inr;
cin >> n;
int j=0;
vector<string> a;
vector<vector <string>> v(n);
for(int i=0;i<n;i++)
{
v.push_back(a);
}
for(int i=0;i<n;i++)
{
int m;
string name;
cin>>m;
cin>>name;
ind=m%2039;
v[ind][j]=name;
j=0;
cout<<name<<endl;
}
}
答案 0 :(得分:1)
对于初学者,向量v
的两个子向量都没有元素。
在此声明中
vector<vector <string>> v(n);
已声明一个具有n个空子向量的向量。
然后在此循环中
for(int i=0;i<n;i++)
{
v.push_back(a);
}
您要向向量v
追加一个n个空子向量。结果,向量v
具有2 * n个空子向量。
在此声明中
ind=m%2039;
使用了幻数2039
。表达式的结果
m%2039
可以大于或等于2 * n。
所以在此声明中
v[ind][j]=name;
同时使用两个索引(尤其是向量v的空子向量)会导致不确定的行为。
您可以使用标准容器std :: map代替子向量的向量,例如,
std::map<unsigned int, std::vector<std::string>> m;