C ++:迭代地图

时间:2014-02-06 01:43:44

标签: c++ visual-studio c++11

我正在尝试遍历地图以读出字符串,然后将矢量中的所有数字读出到文件中。我复制并粘贴了typedef行,然后将其调整为我的代码,所以我不肯定它是正确的。无论如何,Visual Studio给出了我在循环中使用iterator_variable的错误。它说不允许输入类型名称。我该如何解决这个问题?

ofstream output("output.txt");
typedef map<string, vector<int>>::iterator iterator_variable;
for (iterator_variable iterator = misspelled_words.begin(); iterator != misspelled_words.end(); iterator++)
{
    output << iterator_variable->first;
    for (int i = 0; i < misspelled_words.size(); i++)
    {
        output << " " << iterator_variable->second[i];
    }
    output << endl;
}

2 个答案:

答案 0 :(得分:2)

您应该访问iterator->first而不是iterator_variable->first等迭代器。

对于内部循环,您可能希望迭代0到iterator->second.size()而不是misspelled_words.size()

ofstream output("output.txt");
typedef map<string, vector<int>>::iterator iterator_variable;
for (iterator_variable iterator = misspelled_words.begin(); iterator != misspelled_words.end(); iterator++)
{
    output << iterator->first;
    for (int i = 0; i < iterator->second.size(); i++)
    {
        output << " " << iterator->second[i];
    }
    output << endl;
}

答案 1 :(得分:1)

您可以使用基于循环和自动的新范围来获得更简洁和可读的代码。

ofstream output("output.txt");
for ( auto const & ref: misspelled_words ) {
    output << ref.first;
    for (auto const & ref2 : ref.second ) {
        output << " " << ref2;
    }
    output << "\n"; // endl force a stream flush and slow down things.
}