Хорошо, у меня проблемы с печатью значений в моем списке структур. Обычный способ печати списка (с помощью итератора) не работает. Это мой код чтения файла в моем списке.
struct Edge{
map<char, string> edge;
int weight= -1;
Edge(){};
Edge(char v, string e, int w){
edge.insert(pair<char,string>(v,e));
weight = w;
}
};
int main(){
list<Edge> edges;
//Read in file//
string line;
char start;
vector<string> tokens;
if(!file.is_open()){
cout<<"Could not open file\n";
}else{
while(getline(file,line)){
tokens.clear();
start = line.front();
istringstream iss(line);
copy(istream_iterator<string>(iss),
istream_iterator<string>(),
back_inserter<vector<string>>(tokens));
for(int i = 1; i<tokens.size(); i+=2){
//cout << "Position: " <<i << " = " << tokens.at(i) <<endl;
//insert into edges list.
Edge e = Edge(start, tokens.at(i), stoi(tokens.at(i+1)));
edges.push_back(e);
}//end for
}//end while
}//end if-else
return 0;
}//end main
Векторные токены считываются правильно. Я проверил это с помощью закомментированного cout.
Файл представляет собой файл графа, в котором первый элемент является начальной вершиной, а остальная часть строки отформатирована с использованием конечной вершины ребра и веса этого ребра.
Например:
1 2 3 4 5
Будет означать, что ребро (1,2) имеет вес 3, а ребро (1,4) имеет вес 5.
Я не знаю, правильно ли я прочитал свой список, потому что я не могу понять, как его распечатать. Как мне распечатать края списка?
Или есть лучший способ настроить мою структуру? Возможно, еще одна структура для края, а затем структура с краем и весом?
Пробовал печатать, не работает. Синтаксис даже не работает. :(
Обычный способ распечатать список. Но мне это не нравится, так как у меня есть список структур.
list<Edge>::iterator it;
for(it=edges.begin(); it!=edges.end(); it++){
cout << *it <<endl;
}//end for
И это то, что я нашел, когда искал. Вот что я нашел. C++ Как перебрать список структур и доступ к их свойствам Это моя попытка.
//inside main
list<Edge>::iterator it;
for(int i = 0; i<edges.size(); i++){
for_each(edges.begin(), edges.end(), printEdges);
}//end for
//outside main
void printEdges(Edge &data){
cout << "( " << data.edge << " )"
<< ": Weight = " << data.weight <<endl;
}//end printEdges
Спасибо.