Невозможно назначить строки вектору векторов - PullRequest
0 голосов
/ 17 марта 2020

Я пытаюсь написать код на c ++ во время хеширования. Для этого я пытаюсь вставить sh строки в вектор векторов. Но он показывает ошибку сегментации.

#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 Ответ

1 голос
/ 17 марта 2020

Для начала ни один из субвекторов вектора v не имеет элементов.

В этом объявлении

vector<vector <string>> v(n);

объявлен вектор с n пустыми субвекторами.

Тогда в этом l oop

for(int i=0;i<n;i++)
{
    v.push_back(a);
} 

вы добавляете еще один n пустых субвекторов к вектору v. В результате вектор v имеет 2 * n пустых подвекторов.

В этом утверждении

ind=m%2039;

используется число волхвов c 2039. Результат выражения

m%2039

может быть больше или равен 2 * n.

Так что в этом утверждении

v[ind][j]=name;

с использованием обоих индексов (особенно для пустых субвекторов вектора v) приводит к неопределенному поведению.

Вместо вектора субвекторов вы можете использовать стандартный контейнер std :: map, объявленный, например, как

std::map<unsigned int, std::vector<std::string>> m;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...