用一对std::arrays c++11初始化映射
Initialize map with pair of std::arrays c++11
我想编译这几行。插入以映射std::数组对。
#include<iostream>
#include<map>
#include<array>
#include<utility>
using namespace std;
int main()
{
array<double, 8> l;
array<double, 8> r;
map<double, pair<array<double, 8>, array<double, 8>>> m;
pair<array<double, 8>, array<double, 8>> p;
p = make_pair(l, r);//ok
m.insert(1., make_pair(l, r));//not ok
return 0;
}
//clear && g++ getMinPosition.cpp -std=c++11 -o getMinPosition && ./getMinPosition
std::map::insert有各种重载,但不接受代码中两个类型的参数。最接近您使用的是接受const value_type&
的,其中value_type
是pair<const key_type, mapped_type>
的别名。
所以不是:
m.insert(1., make_pair(l, r));//not ok
do:
m.insert(make_pair(1., make_pair(l, r)));
或:
m.insert({ 1., make_pair(l, r) });
m.insert({ 1., {l, r} });
或者为了更好的性能使用模板:
m.emplace(1., make_pair(l, r));
std::map::insert()
取std::map::value_type
,即std::pair<const Key, T>
。所以你必须做
m.insert(make_pair(1., make_pair(l, r)));
但我建议使用emplace()
:
m.emplace(1., make_pair(l, r));
甚至
m.emplace(std::piecewise_construct,
std::forward_as_tuple(1.), std::forward_as_tuple(l, r));
这样就不会在两者之间创建临时配对。
相关文章:
- 继承:构造函数,初始化C++11中基类的类C数组成员
- 在 C++11 及更高版本中,有没有办法初始化初始值设定项列表中的向量?
- C++11 中的混合列表初始化
- 在 C++11 中轻松初始化模板类的静态成员,没有 clang 警告
- 为什么静态数据成员不能在c++11中的类中初始化
- C++11 默认类成员初始化与初始值设定项列表同时
- C++11默认初始化/值初始化/直接初始化
- C++11 整数初始化
- C++11 成员类初始化顺序
- 为什么 GCC 6.3 在没有显式 C++11 支持的情况下编译此大括号初始化列表代码
- 为什么编译器在试图初始化具有C 11样式的对象数组时隐含删除构造函数
- 不同的betwee {}和=当C 11初始化变量
- C 11初始化类静态常量阵列
- C++11 初始化地图
- 使用auto进行C++11初始化
- 用一对std::arrays c++11初始化映射
- 为什么显式声明的构造函数会使用C++11初始化列表阻止成员初始化
- c++ 11初始化列表中有多个bool的段错误
- 如何使用c++ 11初始化函数结果的const向量?
- C++11 初始化指向对象的指针列表