通过迭代打印C ++ Map

时间:2013-07-02 23:29:07

标签: c++ maps iteration

有没有更简单的方法可以解决这个问题,还是有些事我做错了?我认为问题的核心在于代码,

vector<int> &v = miss_words[*i];

但也许我只是把整个概念弄错了。有什么建议吗?

CODE:

void print_map(map<string, vector<int> > miss_words)    // Prints out dictionary set
{
    map<string, vector<int> >::iterator it = miss_words.begin();    // Creates an iterator
    while(it != miss_words.end())           // While hasn't reached the end
    {
        vector<int> &v = miss_words[*it];   // Accesses Vector in map
        for(unsigned int g = 0; g <= v.size(); g++)
        {
            cout<<v.at(g)<<": ";            
            cout<<v.at(g)<<" "<<endl;   // Print out data at i
        }
        it++;                   // Increment iterator
    }
}

编译器认为在miss_words中“运算符[]”没有匹配。

1 个答案:

答案 0 :(得分:4)

您想说vector<int> &v = it->second;

迭代器的值类型是地图的值类型,即pair<string, vector<int>>


事实上,在现代C ++中,您可以更简单地编写它,并且更不容易出错,如下所示:

for (auto const & p : miss_words)
{ 
    for (auto const & x : p.second)
    {
        cout << x << ": " << x << " \n";
    }
}

这样,您甚至不必担心矢量的大小。