The MPL Reference Manual: count_if

Front Page / Algorithms / Querying Algorithms / count_if

# count_if

### Synopsis

    template<
          typename Sequence
        , typename Pred
        >
    struct count_if
    {
        typedef unspecified type;
    };

### Description

Returns the number of elements in `Sequence` that satisfy the predicate `Pred`.

### Header

    #include <boost/mpl/count_if.hpp>

### Parameters

Parameter | Requirement | Description
--- | --- | ---
`Sequence` | Forward Sequence | A sequence to be examined.
`Pred` | Unary Lambda Expression | A count condition.

### Expression semantics

For any Forward Sequence `s` and unary Lambda Expression `pred`:

    typedef count_if<s,pred>::type n;

Return type: | Integral Constant.
Semantics: | Equivalent to
    typedef lambda<pred>::type p;
    typedef fold<
          s
        , long_<0>
        , if_< apply_wrap1<p,_2>, next<_1>, _1 >
        >::type n;

### Complexity

Linear. Exactly `size<s>::value` applications of `pred`.

### Example

    typedef vector<int,char,long,short,char,long,double,long> types;

    BOOST_MPL_ASSERT_RELATION( (count_if< types, is_float<_> >::value), ==, 1 );
    BOOST_MPL_ASSERT_RELATION( (count_if< types, is_same<_,char> >::value), ==, 2 );
    BOOST_MPL_ASSERT_RELATION( (count_if< types, is_same<_,void> >::value), ==, 0 );

### See also

Querying Algorithms, count, find, find_if, contains