用一对 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_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));
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));
因此您不会创建临时对 in-between。
我想编译这些行。插入映射 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_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));
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));
因此您不会创建临时对 in-between。