如何有效地安置回(对)
how to emplace_back(pair) efficiently?
本文关键字:有效地 更新时间:2023-10-16
我有
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));
这是否有效(即是否保证 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);
但是我不喜欢这样的额外代码
std::array<T, N>
没有任何构造函数为任何U
取std::initializer_list<U>
,甚至U = T
也没有。不要误以为可以通过带括号的init-list初始化它,就表示存在这样的构造函数。
实际上是创建一个数组。
foo.emplace_back(std::array<int,3>{i,j,k}, q);
几乎没有任何关于效率的保证,并且不能保证这比您的元组方法更有效。在实践中,它不应该有太大的区别,我希望实现将两种形式的emplace_back
优化到相同的机器码。
相关文章:
- 有效地使用std::unordered_map来插入或增加键的值
- 如何有效地在 std::vector 中插入一对?
- 有效地计算多维数组的累积和?
- 如何有效地计算将单位立方体映射到自身的反射和旋转?
- 有效地将大数存储为 2 的幂用于路径问题
- 如何在C++中写入 1000 个文件时有效地缓冲
- 如何有效地找到数组中三元组和的最小差异?
- 如何在C++中有效地将数字值重新分配给字符数组
- C++有效地找到向量中第一个最接近的匹配值?
- 如何有效地操作满足给定谓词的向量中的所有项目?
- 有效地将数据加载到 std::vector 中<char>
- 如何在使用 cin 请求 int 时有效地使用户输入万无一失?
- C++:有效地将Sha256摘要放入OpenSSL Bignum?
- 如何有效地收集给定数组中的重复元素?
- 如何有效地修剪和合并四叉树中的节点?
- 可以有效地转换 std::any 与 std::any_cast
- 只需要知道我在c ++中打印模式的方式是否有效,或者有另一种方法可以有效地做到这一点
- 如何使用包含内部类的类实例有效地从内部类访问成员?
- 当表示为对象的一维向量时,有效地旋转 NxM 矩阵 (C++)
- 我们怎样才能有效地压缩DNA串