Я записал for_each_if()
и for_each_equal()
, которые делают то, что я думаю, что Вы ищете.
for_each_if()
берет функтор предиката для оценки равенства, и for_each_equal()
принимает значение любого типа и делает прямое сравнение с помощью operator ==
. В обоих случаях функция, в которой Вы передаете, вызвана на каждом элементе, который проходит тест равенства.
/* ---
For each
25.1.1
template< class InputIterator, class Function, class T>
Function for_each_equal(InputIterator first, InputIterator last, const T& value, Function f)
template< class InputIterator, class Function, class Predicate >
Function for_each_if(InputIterator first, InputIterator last, Predicate pred, Function f)
Requires:
T is of type EqualityComparable (20.1.1)
Effects:
Applies f to each dereferenced iterator i in the range [first, last) where one of the following conditions hold:
1: *i == value
2: pred(*i) != false
Returns:
f
Complexity:
At most last - first applications of f
--- */
template< class InputIterator, class Function, class Predicate >
Function for_each_if(InputIterator first,
InputIterator last,
Predicate pred,
Function f)
{
for( ; first != last; ++first)
{
if( pred(*first) )
f(*first);
}
return f;
};
template< class InputIterator, class Function, class T>
Function for_each_equal(InputIterator first,
InputIterator last,
const T& value,
Function f)
{
for( ; first != last; ++first)
{
if( *first == value )
f(*first);
}
return f;
};
Я один из создателей и тех, кто поддерживает JUNG, так что имейте это в виду для ответов ниже.
Во-первых, я должен сказать, что автор Prefuse - друг друга (и да, мы встретились), и он проделал большую работу. У меня нет опыта работы с Prefuse, но я видел несколько прекрасных визуализаций, созданных с его помощью.
1113 Вот ответы на эти вопросы для Юнга. Некоторые из них ((1), (2), (4) продемонстрированы вPluggableRendererDemo
:
ImageShaperDemo
) GraphEditorDemo
) Надеюсь, это поможет.