Похоже, проблема возникает после того, как вы распечатали карту, прежде чем скопировать строки в вектор.Вам нужны две вещи:
while(p!=row.end())
{
cout<<(p->first)<<","<<(p->second)<<"\n";
p++;
}
p = row.begin(); // Must reset iterator!
vector<vector<char>>matrix(r,vector<char>(c));
rep(i,0,r){
int k=0;
rep(j,0,c)(p->second).copy(&matrix[i][j],1,k++);
++p; // Must advance the iterator.
}
Это должно исправить итератор map / set без разыменования, поскольку в цикле с двойной вложенностью вы ссылались на недопустимый итератор (p был установлен в row.end ()).
Редактировать: Кроме того, если вы не предполагаете, что все строки имеют одинаковую длину, вы можете рассмотреть другой метод.Когда вы используете const int c = s.length()
, вы говорите map<int,string>
и vector<char>
, что длина КАЖДОЙ строки в вашем файле точно такой же длины.Если вторая строка короче первой, вы попытаетесь получить доступ к символам в строке, которые не существуют!Обратите внимание, что
rep(j,0,c) (p->second).copy(&matrix[i][j],1,k++)
потерпит неудачу, так как считает, что в нем есть c
символов, тогда как на самом деле его не будет.