在向量映射上使用 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<int,std::vector<int,std::allocator<int> >,std::less<int>,std::allocator<std::pair<const int,std::vector<int,std::allocator<int> > > > >::map(<brace-enclosed initializer list>)
编辑
按照 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 初始化向量会产生不明确的编译错误