无法为向量的向量分配字符串

时间:2020-03-17 13:47:30

标签: c++ string vector

我试图在哈希时用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;
}
}

1 个答案:

答案 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;
相关问题