【问题标题】:Using an initializer_list on a map of vectors在向量映射上使用 initializer_list
【发布时间】:2010-05-17 20:14:17
【问题描述】:

我一直在尝试使用新的 0X 标准初始化 <ints, vector<ints> > 的映射,但我似乎无法正确获取语法。我想制作一个带有 key:value = 1:

的单个条目的地图
#include <initializer_list>
#include <map>
#include <vector>
using namespace std;

map<int, vector<int> > A = {1,{3,4}};

....

使用 gcc 4.4.3 时出现以下错误:

error: no matching function for call to std::map&lt;int,std::vector&lt;int,std::allocator&lt;int&gt; &gt;,std::less&lt;int&gt;,std::allocator&lt;std::pair&lt;const int,std::vector&lt;int,std::allocator&lt;int&gt; &gt; &gt; &gt; &gt;::map(&lt;brace-enclosed initializer list&gt;)

编辑

按照 Cogwheel 的建议并添加额外的大括号,它现在编译时会出现一个警告,可以使用 -fno-deduce-init-list 标志来消除该警告。这样做有什么危险吗?

【问题讨论】:

  • @YGL - 已修复,谢谢。仍然没有解决原来的问题。
  • 在 4.4.1 上,编译器出现神经崩溃(内部错误)。也许 4.5 可以正常工作?
  • 不是还少了一对牙套吗? {1,{3,4}} 不是地图中的单个条目吗? IE。不应该是{{1,{3,4}}}吗?

标签: c++ stl c++11


【解决方案1】:

正如上面的评论所提到的,{1,{3,4}} 是地图中的单个元素,其中键是1,值是{3,4}。所以,你需要的是{ {1,{3,4}} }

简化错误:

error: no matching function for call to map<int,vector<int>>::map(<brace-enclosed initializer list>)

不是一个精确的错误,但仍然有些帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多