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

Initialize map with pair of std::arrays c++11

我想编译这些行。插入映射 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

std::map::insert 有各种重载,但不接受代码中的两个类型参数。最接近您使用的是接受 const value_type& 其中 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));

std::map::insert()std::map::value_typestd::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));

因此您不会创建临时对 in-between。