我有
using namespace std; // for convenience in SO question only
vector<pair<array<int,3>, int>> foo;
并且想要emplace_back
一个带有pair::first
holding{i,j,k}
和pair::second
holding的元素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);
但我宁愿不用这样的额外代码。