C++ 如何将映射输出到输出文件?

C++ 如何将映射输出到输出文件?,c++,C++,我正在尝试制作一个简单的机器学习算法,它接收文本体,将其解析为一个集合和一个列表,从类型为vector>的映射中获取上下文,该列表的大小为任意M,然后输出一个类似于输入文本的文本体。当我将映射从type>切换到上面的类型时,问题出现了,编译器抛出了一个错误,错误代码又大又长,从我收集的信息来看,这意味着我做错了什么。至少我认为是因为问我今天过得怎么样似乎不太可能 我将我的列表、集合和映射输出到不同的文件中,并尝试以不同的方式嵌套我的迭代循环,但是输出看起来都是为了映射而增加的 //context

我正在尝试制作一个简单的机器学习算法,它接收文本体,将其解析为一个集合和一个列表,从类型为vector>的映射中获取上下文,该列表的大小为任意M,然后输出一个类似于输入文本的文本体。当我将映射从type>切换到上面的类型时,问题出现了,编译器抛出了一个错误,错误代码又大又长,从我收集的信息来看,这意味着我做错了什么。至少我认为是因为问我今天过得怎么样似乎不太可能

我将我的列表、集合和映射输出到不同的文件中,并尝试以不同的方式嵌套我的迭代循环,但是输出看起来都是为了映射而增加的

//context: state is a list<string>, M is currently 2, wordList is my input text which has been parsed, and outputFile is my ofstream.

for (int i = 0; i < M; ++i) {
        state.push_back("");
    }
    for (list<string>::iterator it = wordList.begin(); it != wordList.end(); ++it) {
        wordMap[state].push_back(*it);

//this is the main code that is broken
        outputFile.open(fileMap.c_str());
        for (map<list<string>, vector<string> >::iterator itm = wordMap.begin(); itm != wordMap.end(); ++itm) {
            for (list<string>::iterator itl = itm->first.begin(); itl != itm->first.end(); ++itl) {
                outputFile  << " " << *itl;
            }
            for (vector<string>::iterator itv = itm->second.begin(); itv != itm->second.end(); ++itv) {
                outputFile << ", " << *itv;
            }
            outputFile <<  endl;
        }
        outputFile.close();


        state.push_back(*it);
        state.pop_front();
    }
我希望输出类似于: 我是,传奇,快乐,饥饿,疲惫。。。 我是键,其余的是加标点的值

相反,我得到的是: 我是,传奇人物 我是, 我很高兴,快乐 我累了,渴了,热了,要打我的电脑

这是我的编译器给我的错误代码:

error: conversion from ‘std::list<std::basic_string<char> >::const_iterator 
  {aka std::_List_const_iterator<std::basic_string<char> >}’
to non-scalar type ‘std::list<std::basic_string<char> >::iterator
  {aka std::_List_iterator<std::basic_string<char> >}’ requested

for (list<string>::iterator itl = itm->first.begin(); itl != itm->first.end(); ++itl)
因此,您试图在常量容器上使用迭代器,而不是常量迭代器


这是因为std::map或任何关联容器中的键都是const。您可以使用较新的for auto&ref:container表单来避免键入所有长迭代器类型名。它省力且不易出错。

谢谢!出于某种原因,您显示的格式在我的编译器AWS linux中不起作用,但我将迭代器更改为const_迭代器,它起了作用!
... conversion from ... const_iterator to ... iterator ... requested