C :通过地图进行迭代

C++: Iterate Through Map

本文关键字:迭代 地图      更新时间:2023-10-16

我正在尝试通过地图迭代以读取字符串,然后读取矢量中的所有数字到文件。我复制并粘贴了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;
}

您应该访问迭代器,例如 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;
}

您也可以将基于循环的新范围和自动使用用于更简洁且可读的代码。

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.
}