我想编译这一行。插入映射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
答案 0 :(得分:2)
std::map::insert有各种重载,但不接受代码中的两个类型参数。与您使用最接近的是接受const value_type&
的{{1}},其中value_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));
答案 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));
所以你不要在中间创建临时对。