c++ - 为什么 Multimap 不将一个索引处的所有值写入文本文件?

标签 c++ c++14 multimap

我只是想用 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';

    }
    
}

Working demo

或者

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/

相关文章:

c++ - 一个二进制文件中相同类型的不同布局

c# - 如何将MultiMap .Net转发到Java?

c++ - 插入到 multimap 导致段错误

android - Cocos2d-x 在光标焦点上更改 MenuItemImage

c++ - vector 迭代器 -> 打印类(缺少参数)

c++ - std::atomic 的正确用法

c++ - 自动化 C++ 头文件/源代码分离的工具

c++ - 解包方法参数的元组

c++ - 对于每个循环只取数组 C++ 的第一个字符串

c++ - 将 multimap 转换为 void 指针,然后返回 multimap