// 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;的右手操作数。 (或者没有可接受的转换)
答案 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';
}