私は持っている
using namespace std; // for convenience in SO question only
vector<pair<array<int,3>, int>> foo;
そして、保持と保持をemplace_back
持つ要素が必要です。このコンパイルを取得できる唯一の方法は、かなり不器用なものを使用することでしたpair::first
{i,j,k}
pair::second
q
foo.emplace_back(piecewise_construct,
forward_as_tuple(i,j,k),
forward_as_tuple(q));
これは効率的ですか (つまり、s が最適化されて除去されることが保証されていますか)? tuple
または、効率的であることが保証されている別の方法はありますか?
(私は試した
foo.emplace_back(std::initializer_list<int>{i,j,k}, q);
しかし、gcc 4.8.1 では役に立ちません)。定義することでこの問題を回避できることを知っています
struct element : std::pair<std::array<int,3>,int>
{
element(int i, int j, int k, int q)
{ first={i,j,k}; second=q; }
};
vector<element> foo;
foo.emplace_back(i,j,k,q);
しかし、私はそのような余分なコードなしでやりたいと思っています。