count

count (개수 세기) / count_if (조건 만족 개수 세기)

범위에서 특정 값 또는 조건을 만족하는 원소의 개수를 세는 알고리즘이에요. <algorithm> 헤더에 있어요.

출처: cppreference

본문

count는 범위 [first, last)에서 value와 같은 원소의 개수를 반환해요. count_if는 술어 p를 만족하는 원소의 개수를 반환해요.

template< class InputIt, class T >
typename std::iterator_traits<InputIt>::difference_type
    count( InputIt first, InputIt last, const T& value );   // (1)

template< class InputIt, class UnaryPred >
typename std::iterator_traits<InputIt>::difference_type
    count_if( InputIt first, InputIt last, UnaryPred p );   // (2)

반환 타입은 difference_type이에요. count의 같음 판정은 operator==로, count_if의 조건 판정은 p로 해요. C++17부터 실행 정책 오버로드가 추가됐어요.

    1. value == *it인 원소 수.
    1. p(*it)이 참인 원소 수.

복잡도는 범위 크기에 정확히 비례해요(last - first번의 비교/판정).

std::vector<int> v{1, 2, 3, 1, 1, 4};
auto n = std::count(v.begin(), v.end(), 1);       // 3
auto odd = std::count_if(v.begin(), v.end(),
                         [](int x){ return x % 2 != 0; });  // 4

전체 범위를 일일이 세지 않고도 간결하게 특정 값/조건의 빈도를 얻을 때 써요.

더 알아보기 (Learn more)

cppreference