在向量映射上使用 initializer_list

Posted

技术标签:

【中文标题】在向量映射上使用 initializer_list【英文标题】:Using an initializer_list on a map of vectors 【发布时间】: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吗? 【参考方案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>)

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

【讨论】:

以上是关于在向量映射上使用 initializer_list的主要内容,如果未能解决你的问题,请参考以下文章

元组向量和 initializer_list

从 initializer_list 初始化向量会产生不明确的编译错误

如何在初始化期间将 std::initializer_list 转换为列矩阵或列向量?

带有 initializer_list 的编译时查找表

使用迭代器在向量中插入下一个值以映射

std::initializer_list 下的数组的生命周期是多少? [复制]