无法打印指向unordered_map元素的指针

时间:2017-10-19 20:41:07

标签: c++ iterator unordered-map

我已经安装了CodeBloks,我正在测试它有一个简单的问题。

#include <iostream>
#include <unordered_map>

using namespace std;

int main()
{

    unordered_map<int,int> mp;
    mp[1]=2;
    mp[2]=3;
    for(unordered_map<int,int>::iterator it = mp.begin();it!=mp.end();it++)
        cout<<*it<<" ";
    return 0;
}

我收到此错误:

cannot bind 'std::ostream {aka std::basic_ostream<char>}' lvalue to 'std::basic_ostream<char>&&'

4 个答案:

答案 0 :(得分:2)

取自cppreference

for( const auto& n : u ) {
    std::cout << "Key:[" << n.first << "] Value:[" << n.second << "]\n";
}

地图(无序或无地)由keyvalue组成。您可以使用迭代器中的firstsecond来访问它。

答案 1 :(得分:1)

错误可能会产生误导。实际问题是无序映射以键和值对的形式进行迭代,并且没有<<运算符可以直接打印这些对。

您可以通过it->first访问密钥,通过it->second访问密钥:

for(unordered_map<int,int>::iterator it = mp.begin();it!=mp.end();it++)
    cout<<it->first << " " << it->second << endl;

Demo.

答案 2 :(得分:0)

地图存储键/值对,it提供成员first(代表键)和成员second(代表值)。请尝试以下cout... - 声明:

cout << it->first << ":" << it->second << " ";

答案 3 :(得分:0)

结构化绑定可以很好地解决这个问题:

for(auto [first, second] : mp) {
    cout << first << '\t' << second << '\n';
}