我只是想用 C++ 将数据从 multimap 写入文本文件。我的多重映射在一个键上包含两个值,尽管它在控制台上输出两个值,但它仅在文件中写入第一个值的键和值(意味着它只写入“a”和“100”)。为什么不将两个值写入文件? 这是我的代码
int main() {
multimap<string, string> rec;
rec.insert({"a", "100"});
rec.insert({"a", "200"});
writeFile("a", rec);
}
void writeFile(string a, multimap<string, string> rec) {
ofstream data;
for (auto i = rec.find("a"); i != rec.end(); i++) {
data.open("file4.txt");
data << i->first << '\t' << i->second << '\n';
}
}
最佳答案
问题是您已将 data.open("file4.txt");
放入 for 循环中,因此它会用新值覆盖旧值。
要解决这个问题,请将其置于循环之外。
void writeFile(string a, multimap<string, string> rec) {
//----------------vvvvvvvvvvv------>use here outside for loop
ofstream data("file4.txt");
for (auto i = rec.find("a"); i != rec.end(); i++)
{
data << i->first << '\t' << i->second << '\n';
}
}
或者
void writeFile(string a, multimap<string, string> rec) {
ofstream data;
data.open("file4.txt"); //this is now outside for loop
for (auto i = rec.find("a"); i != rec.end(); i++)
{
data << i->first << '\t' << i->second << '\n';
}
}
关于c++ - 为什么 Multimap 不将一个索引处的所有值写入文本文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72339823/