我试图用c++读取一个文件并填充代表邻接表的 vector ,该文件包含一个无向加权图的邻接表表示,每一行包括与该特定顶点相邻的节点元组以及长度那个边缘。例如,第六行的第一个条目具有6,指示该行对应于标记为6的顶点。该行的下一个条目“141,8200”指示在顶点6和顶点141之间存在一条边长为8200的边该行的其余对表示与顶点6相邻的其他顶点以及相应边的长度。
文件例如:-
1 3,4 2,20 5,89
2 4,7 1,102
ifstream ifs;
string line;
ifs.open("dijkstraData.txt");
cout<<log(vertices)<<" "<<loops<<endl;
std::vector<vector < std::pair < int,int > > > CadjList(vertices);
while(getline(ifs,line)){
// transfer the line contents to line_stream
stringstream line_stream(line);
//now what
}
最佳答案
首先,我提取顶点并将其放在和中,然后将所有后续字符串提取到 rest 中,然后只需查找逗号并将两个子字符串都转换为整数即可。我使用atoi将字符串转换为int,因为我的机器上没有C++ 11,但是我建议您更新gcc并使用std::stoi。
while(getline(ifs,line)){
stringstream line_stream(line);
line_stream>>a;
while(line_stream>>rest){
int pos = rest.find(",");
string vertex = rest.substr(0,pos);
string weight = rest.substr(pos+1,rest.length() - pos);
int ver = atoi(vertex.c_str());
int wei = atoi(weight.c_str());
pair<int,int> foo(ver,wei);
v[a-1].push_back(foo);
}
}