C++:迭代通过映射

问题描述:

我想通过映射迭代读出一个字符串,然后将矢量中的所有数字读出到一个文件中。我复制并粘贴了typedef行,然后将其调整为我的代码,所以我不积极,这是正确的。无论如何,Visual Studio在我的循环中给我使用iterator_variable的错误。它说类型名称是不允许的。我怎样才能解决这个问题?C++:迭代通过映射

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; 
} 
+0

正如错误说,'iterator_variable'是一种类型的,与'for'的主体内的变量'iterator'的名称替换它。内部的'for'也是可疑的。你确定你想循环'[0,misspelled_words.size()]'而不是'[0,iterator-> second.size())'吗? – Praetorian

你应该访问迭代器像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. 
}