Definition
An instance cp of class CompPred<Iter,DA,Comp> is a predicate comparator that produces boolean values with the given compare function and the attribute associated with an iterator.
Creation
| CompPred<Iter,DA,Comp> | cp(DA da, Comp comp, typename DA::value_type val); | |
| introduces a variable cp of this class and associates it to the given data accessor da, compare function comp and value val. | ||
Precondition: Comp is a pointer-to-function type which takes two values of type typename DA::value_type and produces a boolean return value. Comp might also be a class with member function bool operator()(typename DA::value_type,typename DA::value_type).
Example
In the following example, a node iterator for red nodes will be created. At first the basic part (see sect. node_array_da for explanation of the data accessor node_array_da):
graph G; NodeIt it(G); node_array<color> na_colour(G,black); node_array_da<color> da_colour(na_colour); assign_some_color_to_each_node();Now follows the definition of a ``red iterator'' (Equal<T> yields true, if the given two values are equal):
template<class T>
class Equal {
public:
bool operator() (T t1, T t2) const {
return t1==t2; }
};
typedef CompPred<NodeIt,node_array_da<color>,Equal<color> > Predicate;
Predicate PredColour(da_colour,Equal<color>(),red);
FilterNodeIt<Predicate,NodeIt> red_it(PredColour,it);
This simplifies the loop to the following:
while(red_it.valid()) {
do_something(red_it);
++red_it; }
Equal<T> is a class that compares two items of the
template parameter T by means of a method
bool operator()(T,T);. There are some classes available for this purpose:
Equal<T>, Unequal<T>, LessThan<T>, LessEqual<T>,
GreaterThan<T> and GreaterEqual<T> with obvious semantics,
where T is the type of the values. Predicates of the STL can be used
as well since they have the same interface.