在定制对象向量上迭代,但只访问一个成员以应用通用STL算法的快速方法是什么?
struct Foo
{
std::string a;
double b = 1.0;
};
int main()
{
std::vector<Foo> fooVector(20);
// iterate over all members b -- as if we were iterating over a std::vector<double>
std::discrete_distribution<int> dist(/*??*/, /*??*/);
}我是说“快”
iterator_facade等等),发布于 2015-12-10 12:30:24
std::discrete_distribution<...>的构造函数不支持任何显式的方法来项目值(就像一个函数对象(可选地应用于在使用之前转换*it的结果)。因此,我认为有三种基本方法:
std::vector<double>获得迭代器产生双倍的范围:
如所需的std::fooVector.end(),std::back_inserter(tmp),福康斯特&f{返回f.b;};std::discrete_distribution d(tmp.begin(),tmp.end());Foo上使用转换运算符转换为double可能是可行的:
Foo类{ // .操作符double() const {返回这个->b;};// .std::discrete_distribution d(fooVector.begin(),fooVector.end());显然,这些方法是有变化的,但我不认为还有什么可以巧妙地做。缺少的本质上是一种具有序列投影的通用方法(我通常将它们称为属性映射)。
https://stackoverflow.com/questions/34198818
复制相似问题