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;
}
答
你应该访问迭代器像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.
}
正如错误说,'iterator_variable'是一种类型的,与'for'的主体内的变量'iterator'的名称替换它。内部的'for'也是可疑的。你确定你想循环'[0,misspelled_words.size()]'而不是'[0,iterator-> second.size())'吗? – Praetorian