无法显示地图数据

时间:2015-07-10 05:53:49

标签: c++ dictionary vector

// Map created
std::map<int, std::vector<int>> _map;

// Key/Data inserted
_map.insert(std::pair<int, std::vector<int> >(0, { i }));

// Display values [ERROR]
for (const auto &p : _map) 
{       
  std::cout << "m[" << p.first << "] = " << p.second << '\n';   
}

这是一个非常简单的程序,通过迭代整个地图来创建地图,插入值并显示键/对。 我能够显示地图密钥(p.first),但我无法显示数据的值(p.second)。

  

错误C2679:二进制&#39;&lt;&lt;&# :找不到哪个运算符采用类型&#39; const std :: vector&gt;&#39;的右手操作数。 (或者没有可接受的转换)

3 个答案:

答案 0 :(得分:4)

p.second中的{p> std::vector<int>和标准库不会使operator<<超过vector,如错误消息所述。因此,您必须添加内部循环以浏览vector并打印其中包含的值。

而不是......

std::cout << "m[" << p.first << "] = " << p.second << '\n';   

...尝试...

std::cout << "m[" << p.first << "] = {";
for (int n : p.second)
     std::cout << ' ' << n;
std::cout << " }\n";   

答案 1 :(得分:2)

或者,您可以使用p.second

打印std::copy的内容
std::copy(p.second.begin(), p.second.end(), std::ostream_iterator<int>(std::cout, " "));

对于更一般的解决方案,我建议使用伟大的C++ container pretty print library。该库使您的代码无需进一步更改即可运行:

std::cout << p.second << std::endl;

答案 2 :(得分:0)

您必须自己为operator >>定义std::vector

template <typename T>
std::ostream & operator >>(std::ostream & out, const std::vector<T> & vec) {
    std::copy(vec.begin(), vec.end(), std::ostream_iterator<T>(out, " "));
    return out;
}

添加此定义后,您的代码将按原样运行。

for (const auto & p : _map)  {       
    std::cout << "m[" << p.first << "] = " << p.second << '\n';   
}