본문으로 건너뛰기
모던 C++LESSON 14

STL 알고리즘 기초: find, sort, count_if

난이도초급 → 중급 입문
예상 시간45분
선수지식이전 강의

14강. STL 알고리즘 기초: find, sort, count_if

이번 강의에서 해결할 문제​

찾기, 정렬, 개수 계산을 매번 직접 반복문으로 작성하면 경계 조건과 비교 규칙이 흩어집니다. 코드만 보고 작업의 목적을 알아내기까지 반복문 내부를 모두 읽어야 합니다.

학습 목표​

  • find, sort, count_if의 입력 범위와 결과를 설명합니다.
  • 반복자 결과를 end()와 비교합니다.
  • 람다로 조건을 전달해 목록 질의를 표현합니다.

먼저 알아야 할 핵심 개념​

표준 알고리즘은 보통 [begin, end) 반열린 범위를 받습니다. end()는 마지막 원소가 아니라 마지막 다음 위치입니다. find가 값을 못 찾으면 end()를 반환하고, sort는 전달한 범위의 원소 순서를 실제로 바꿉니다.

가장 작은 실행 가능한 예제​

basic_algorithms.cpp
#include <algorithm>
#include <iostream>
#include <vector>

int main() {
std::vector<int> scores{40, 90, 70, 20};
std::sort(scores.begin(), scores.end());

const auto found = std::find(scores.begin(), scores.end(), 70);
const auto highCount = std::count_if(
scores.begin(), scores.end(),
[](const int score) { return score >= 60; });

std::cout << scores.front() << ' '
<< (found != scores.end()) << ' ' << highCount << '\n';
}

핵심 코드 줄별 설명​

  1. sort는 점수를 오름차순으로 재배치합니다.
  2. find는 값 70의 위치 또는 end()를 반환합니다.
  3. 위치를 사용하기 전에 찾기 성공 여부를 비교합니다.
  4. count_if는 60 이상인 점수 수를 셉니다.
  5. 람다는 무엇을 높은 점수로 볼지 정의합니다.

실행 결과와 값 변화​

20 1 2

찾는 값을 75로 바꾸면 가운데 값은 0이 됩니다. 기준을 80으로 올리면 높은 점수는 90 하나뿐입니다.

단계별 실습​

실습 목표​

아이템 가격 목록에서 값 찾기, 정렬, 조건 개수 계산을 수행합니다.

시작 전 상태와 실행 방법​

vector<int> prices{300, 50, 120, 500}를 준비합니다.

1단계: 최소 코드 작성​

오름차순 정렬 후 모든 가격을 출력합니다.

2단계: 값 또는 조건을 바꿔 결과 비교​

120과 125를 각각 찾아 성공 여부를 비교합니다.

3단계: 작은 기능 확장​

예산을 캡처한 람다로 구매 가능한 아이템 수를 계산합니다.

4단계: 스스로 해결하기​

아이템 구조체를 가격 기준으로 정렬하는 비교 람다를 작성하세요.

막혔을 때​

알고리즘 이름을 찾지 못하면 <algorithm>을 포함합니다. found를 바로 역참조하기 전에 반드시 found != end()를 검사합니다.

흔한 실수와 해결 방법​

  • find 실패 결과 역참조: end()는 원소가 아니므로 먼저 비교합니다.
  • sort가 원본을 유지한다고 생각: 실제 순서가 바뀌므로 복사본이 필요한지 판단합니다.
  • 복잡한 부작용을 람다에 숨김: 알고리즘 조건은 가능한 한 같은 입력에 같은 결과를 반환하게 합니다.

게임 개발 연결​

거리순 타깃 정렬, 특정 ID 검색, 살아 있는 적 수 계산에 적용할 수 있습니다. 프레임마다 큰 목록을 정렬하면 비용이 커질 수 있으므로 호출 빈도와 데이터 크기를 측정합니다.

이해 점검 질문 3개​

  1. end()가 마지막 원소가 아닌 이유는 무엇인가요?
  2. find 결과를 사용하기 전 어떤 검사가 필요한가요?
  3. sort를 호출할 때 원본 데이터에 어떤 변화가 생기나요?

핵심 요약​

표준 알고리즘은 반복의 목적을 이름으로 표현합니다. 범위와 반환 계약을 확인하고, 찾기 실패와 원본 변경 여부를 명시적으로 처리합니다.

다음 강의 연결​

15강. optional에서 반복자 대신 값이 없을 수 있다는 사실을 반환 타입으로 직접 표현합니다.

MINI QUIZ

STL 알고리즘 기초: find, sort, count_if 미니 퀴즈

선택 즉시 정답과 해설을 확인할 수 있습니다. 결과는 이 브라우저에만 저장됩니다.

0 / 2
  1. 문제 1“STL 알고리즘 기초: find, sort, count_if” 내용을 실제 작업에 적용한 설명으로 가장 알맞은 것은 무엇인가요?
  2. 문제 2“STL 알고리즘 기초: find, sort, count_if”에서 ‘복잡한 부작용을 람다에 숨김’ 문제가 생겼습니다. 가장 알맞은 진단 또는 대응은 무엇인가요?
LESSON STATUS

학습을 마쳤나요?

직접 실습과 점검 질문까지 확인한 뒤 완료로 표시하세요.

14강. STL 알고리즘 기초: find, sort, count_if 미완료 상태