-4

この行をコンパイルしたいと思います。std::array のペアをマップするために挿入します。

#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
4

2 に答える 2

2

std::map::insertにはさまざまなオーバーロードがありますが、コードのように型の 2 つの引数を受け入れません。あなたの用途に最も近いのは、const value_type&wherevalue_typeが のエイリアスであることを受け入れるものですpair<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));
于 2016-01-07T23:52:11.673 に答える
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));

その間に一時的なペアを作成しません。

于 2016-01-07T23:54:41.830 に答える