我正在寻找一种优雅的方式来从元组向量创建tuple_element向量
I'm looking for an elegant way to create a vector of tuple_element from a vector of tuple
typedef std::tuple<A, B, C> TUPLE;
typedef std::vector<TUPLE> TUPLE_VECTOR;
typedef std::vector<A> A_VECTOR;
我想找到从TUPLE_VECTOR创建A_VECTOR的最优雅的方式。
您可以使用std::transform
从TUPLE_VECTOR
中仅复制A
。 那看起来像
TUPLE_VECTOR tuples;
A_VECTOR a_vector;
a_vector.reserve(tuples.size());
std::transform(tuples.begin(), tuples.end(), std::back_inserter(a_vector),
[](const auto& tuple){ return std::get<A>(tuple); }); // can also use std::get<0>(tuple)
以下优点是可用于初始化基类/成员对象...
#include <iostream>
#include <boost/iterator/transform_iterator.hpp>
#include <tuple>
#include <vector>
#include <functional>
#include <utility>
typedef std::tuple<int, double> pair;
typedef std::vector<pair> pairVector;
typedef std::vector<int> intVector;
int main()
{ const pairVector sPairs{{0, 1.0}, {2, 3.0}, {4, 5.0}};
typedef boost::transform_iterator<
std::function<const int&(const pair&)>,
pairVector::const_iterator,
const int&,
const int*
> transIt;
const std::function<const int&(const pair&)> sF(
static_cast<const int&(*)(const pair&)>(
std::get<std::size_t(0), int, double>
)
);
const intVector sFirsts(
transIt(
sPairs.begin(),
sF
),
transIt(
sPairs.end(),
sF
)
);
}
相关文章:
- 将元组的向量转换/构造为堆
- 将元组的向量构造成堆
- 元组由 Swig 生成的 Python 包装器返回,用于C++向量
- 我正在寻找一种优雅的方式来从元组向量创建tuple_element向量
- 如何在元组初始化向量中删除样板?
- c++:交换向量中所有元组的第一个和第二个元素
- 如何在C++中创建元组向量?
- 返回两个向量 – 使用引用还是元组?
- 如何在具有特定条件的向量中删除所有元组?
- 使用 C++-17,如何从字符串向量填充元组
- C++ 按数值对元组<字符串、浮点数>然后按字典顺序排序的向量
- 如何将值元组中的相应值附加到相同类型的向量元组中
- 将可变参数模板包装到元组向量
- 从 c++ 中的字符串向量创建一个元组
- C++向量元组,请按索引从元素创建元组
- 从类型列表创建向量元组
- 如何打印类型向量<元组<字符串、int、int>> 以筛选 c++?
- 如何使用 C++11 可变参数模板来定义由向量元组支持的元组向量
- 初始化类成员初始值设定项列表中的向量元组
- 如何使用笛卡尔积将向量元组转换为元组的向量