无法显示地图数据

Posted

技术标签:

【中文标题】无法显示地图数据【英文标题】:Can't display map data 【发布时间】:2015-07-10 05:53:48 【问题描述】:
// 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:二进制“”类型右侧操作数的运算符(或没有可接受的转换)

【问题讨论】:

你认为 p.second 会返回什么?它返回一个整数向量,因此您需要编写一个内部 for 循环来遍历该向量并在那里打印整数。向量没有定义 我无法访问 p.second 值,那么如何使用它来创建嵌套循环?你能举个小例子吗?谢谢 您可以访问它。 std::cout 没有运算符 for(auto &pp : p.second) std::cout<<pp; 【参考方案1】:

std::vector&lt;int&gt; 中的p.second 和标准库不会为vectors 重载operator&lt;&lt;,如错误消息所述。所以你必须添加一个内部循环来遍历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";   

【讨论】:

【参考方案2】:

或者,您可以使用std::copy 打印p.second 的内容

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;

【讨论】:

我喜欢它是一个单行指令的事实。让我删除对这种方法的便利性的评论,以便以更中立的方式呈现它。【参考方案3】:

您必须自己为std::vector 定义operator &gt;&gt;

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';   

【讨论】:

以上是关于无法显示地图数据的主要内容,如果未能解决你的问题,请参考以下文章

echarts使用本地json文件无法显示地图

颤动的谷歌地图无法显示来自firebase的标记

解决Vue 高德地图自定义地图样式,无法显示无法生效的问题

百度地图在点击到哪去下方显示网络连接失败啥意思?

无法单击标记 - 谷歌地图集群Android,无法在谷歌地图中显示信息窗口

谷歌地图在 Ng 地图中显示“无法获取位置......返回错误代码 403”?