Для начала ни один из субвекторов вектора 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;