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부터 실행 정책 오버로드가 추가됐어요.
-
value == *it인 원소 수.
-
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
전체 범위를 일일이 세지 않고도 간결하게 특정 값/조건의 빈도를 얻을 때 써요.