使用std :: arrays c ++ 11对初始化映射

时间:2016-01-07 23:45:33

标签: c++ c++11 stdmap std-pair stdarray

我想编译这一行。插入映射std :: arrays对。

#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

2 个答案:

答案 0 :(得分:2)

std::map::insert有各种重载,但不接受代码中的两个类型参数。与您使用最接近的是接受const value_type&的{​​{1}},其中value_typepair<const key_type, mapped_type>的别名。

所以代替:

m.insert(1., make_pair(l, r));//not ok

做的:

m.insert(make_pair(1., make_pair(l, r)));

或:

m.insert({ 1., make_pair(l, r) });
m.insert({ 1., {l, r} });

或为了更好地使用emplace

m.emplace(1., make_pair(l, r));

答案 1 :(得分:1)

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

所以你不要在中间创建临时对。