【发布时间】:2021-05-31 03:29:25
【问题描述】:
我正在学习 C++。这是我的问题:我正在尝试从文本文件中读取数据并将其保存到 map
这是我的结构:
struct category
{
std::string tram_stop;
float dist;
};
using Tram = std::map<std::string, std::vector<category>>;
这是我尝试将数据保存到地图的地方。
void store(Tram& tram, std::vector<std::string>& tram_data)
{
if (tram.find (tram_data.at (0)) == tram.end ())
{
tram[tram_data.at (0)] = {};
}
else
{
tram.at (tram_data.at (0)).push_back (category {tram_data.at (1), std::stof(tram_data.at(2))});
}
}
这里是 main()。
int main()
{
Tram tram;
print_rasse();
// Ask input filename.
std::string filename;
std::cout << "Give a name for input file: ";
std::cin >> filename;
// Read input file.
std::ifstream file_in;
file_in.open (filename);
if (!file_in.is_open ())
{
std::cout << INVALID_FILE << std::endl;
return EXIT_FAILURE;
}
std::vector<std::string> tram_data;
if (file_in.is_open())
{
std::string line;
while( std::getline(file_in,line) )
{
std::stringstream ss(line);
std::string tram_line, tram_stop, distance;
std::getline(ss,tram_line,';'); //std::cout<< ""<<tram_line <<" ";
std::getline(ss,tram_stop,';'); //std::cout<<" "<<tram_stop<<" ";
std::getline(ss,distance); //std::cout<<" "<<distance<< " ";
if (tram_line != "" && tram_stop != "")
{
tram_data.push_back (tram_line);
tram_data.push_back (tram_stop);
tram_data.push_back (distance);
//std::cout << tram_line << " " << distance << std::endl;
}
else
{
std::cout << INVALID_FORMAT << std::endl;
return EXIT_FAILURE;
}
}
file_in.close ();
store(tram, tram_data);
}
这是我认为不起作用的部分。也尝试了不同的迭代器。
if (upper_com == "LINES")
{
std::cout << "All tramlines in alphabetical order:" << std::endl;
for (auto& item : tram)
{
std::cout << item.first << std::endl;
}
}
【问题讨论】:
-
什么是
Tram?您的store函数似乎过于复杂,并且处理为给定字符串存储的第一件事与后续存储不同。 -
对不起,从我的帖子中忘记了这个:使用 Tram = std::map<:string std::vector>>; Tram 是我要保存数据的地图。
-
请添加一个示例输入文件和一个最小的、可重现的示例stackoverflow.com/help/minimal-reproducible-example
-
对不起。新手。以下是文件示例:West;Pyynikintori;0 West;Tuulensuu;0.5
标签: c++ dictionary printing iterator