В моем приложении у меня есть класс вроде этого:Упорный фильтр ключевое значение
class sample{
thrust::device_vector<int> edge_ID;
thrust::device_vector<float> weight;
thrust::device_vector<int> layer_ID;
/*functions, zip_iterators etc. */
};
В данном индексе каждый вектор сохраняет соответствующие данные одного и того же края.
Я хочу, чтобы написать функцию, которая отфильтровывает все ребра данного слоя, что-то вроде этого:
void filter(const sample& src, sample& dest, const int& target_layer){
for(...){
if(src.layer_ID[x] == target_layer)/*copy values to dest*/;
}
}
Лучший способом я нашел, чтобы сделать это с помощью thrust::copy_if(...)
(details)
это будет выглядеть следующим образом:
void filter(const sample& src, sample& dest, const int& target_layer){
thrust::copy_if(src.begin(),
src.end(),
dest.begin(),
comparing_functor());
}
И здесь мы достигаем мою проблему:
comparing_functor()
- унарная функция, что означает, что я не могу передать значение target_layer
.
Кто-нибудь знает, как обойти это, или есть идея для реализации этого, сохраняя целостность структуры данных класса?
Спасибо за помощь, он работает. – Slawo