C++:遍历地图

Posted

技术标签:

【中文标题】C++:遍历地图【英文标题】:C++: Iterate Through Map 【发布时间】:2014-02-06 01:43:43 【问题描述】:

我正在尝试遍历地图以读取字符串,然后将向量中的所有数字读取到文件中。我复制并粘贴了 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_variable 是一种类型,请将其替换为 for 正文中的变量名称 iterator。内部for 也很可疑。确定要循环遍历 [0, misspelled_words.size()] 而不是 [0, iterator-&gt;second.size()) 【参考方案1】:

您应该像 iterator-&gt;first 一样访问迭代器,而不是 iterator_variable-&gt;first

对于内部循环,您可能希望从 0 迭代到 iterator-&gt;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;

【讨论】:

【参考方案2】:

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

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.

【讨论】:

以上是关于C++:遍历地图的主要内容,如果未能解决你的问题,请参考以下文章

遍历 golang 地图

如何遍历地图,修改地图但在每次迭代时恢复?

遍历无序映射 C++

遍历地图的所有键

在 Groovy 中循环遍历地图?

java - 如何按顺序遍历地图[重复]