C++ STL map lower_bound 비교자 사용 시 주의할 점과 성능 최적화 전략
std::map은 C++ 표준 라이브러리에서 제공하는 정렬된 연관 컨테이너로, 내부적으로 레드-블랙 트리를 사용합니다. lower_bound 멤버 함수는 주어진 키보다 작지 않은 첫 번째 요소를 찾는 데 사용되며, 시간 복잡도는 O(log n)입니다. 이 함수의 동작은 컨테이너가 사용하는 비교자(Comparator)에 크게 의존합니다.
비교자의 역할과 사용자 정의 비교자
std::map은 기본 ...
6월 5일 23:41에 게시됨
C++ 다중 기준 정렬 구현 방법
이원 정렬의 개념
알고리즘 문제 풀이 과정에서 두 가지 이상의 데이터를 묶어서 정렬해야 하는 상황을 자주 접하게 됩니다. 예를 들어, 길이가 $n$인 두 수열 $A = \{a_1, a_2, \dots, a_n\}$과 $B = \{b_1, b_2, \dots, b_n\}$이 주어졌을 때, 먼저 $a_i$를 기준으로 오름차순 정렬하고, $a_i$ 값이 같다면 $b_i$를 기준으로 다시 오름차순 정렬하는 방식입니다. 이를 C+ ...
6월 4일 17:03에 게시됨
C++ Friend 기능의 심층 분석
Friend는 C++에서 논란이 있으면서도 실용적인 가치를 지닌 기능이다.
1. 언어 설계 철학의 차이
C#에서는 private 멤버에 대한 접근이 해당 클래스 내부에서만 허용된다. 하지만 C++은 다른 접근 방식을 취한다:
캡슐화는 절대적 차단이 아닌, 접근 권한의 세밀한 제어를 의미한다.
C++에서는 특정 함수나 클래스가 외부에 있더라도 신뢰할 수 있는 경우, 이를 허용 ...
6월 3일 16:32에 게시됨
스택과 큐의 비교 및 구현
스택과 큐는 컴퓨터 과학에서 널리 사용되는 두 가지 기본적인 데이터 구조입니다. 이 글에서는 이 두 데이터 구조에 대해 자세히 설명하고 C++ 예제 코드를 통해 구현 방법을 보여드리겠습니다.
스택 (Stack)
스택은 후입선출(LIFO, Last In First Out) 특성을 가진 데이터 구조로, 한쪽 끝(스택 상단)에서만 삽입과 삭제 연산이 가능합니다. 스택의 기본 연산은 다음과 ...
6월 2일 22:33에 게시됨
C++ STL 알고리즘 완벽 가이드
1. 비수정 시퀀스 알고리즘
이러한 알고리즘은 작업 대상 컨테이너의 요소를 변경하지 않습니다.
1.1 find와 find_if
find(begin, end, value): value와 동일한 첫 번째 요소를 찾아 반복자 반환 (못 찾으면 end 반환)
find_if(begin, end, predicate): 조건자를 만족하는 첫 번째 요소 찾기
find_end(begin, end, sub_begin, sub_end): 하위 시퀀스가 마지막으로 나타나 ...
6월 1일 02:14에 게시됨
C++ STL 알고리즘 종합 가이드
1. 비변경 시퀀스 알고리즘
이 알고리즘들은 대상 컨테이너의 요소들을 수정하지 않고 동작합니다.
1.1 검색 관련 함수
find(start, end, target): 특정 값과 일치하는 첫 번째 요소를 찾습니다.
find_if(start, end, condition): 조건을 만족하는 첫 번째 요소를 탐색합니다.
find_end(start, end, pattern_start, pattern_end): 하위 시퀀스가 마지막으로 나타나는 위치 ...
5월 30일 17:57에 게시됨
C++로 구현하는 LRU 캐시 시뮬레이션
캐시 시뮬레이션 문제는 메모리 계층 구조의 핵심 개념을 검증하는 대표적인 알고리즘 문제입니다. 이 글에서는 C++를 활용해 집합-연관 매핑 방식의 캐시를 모델링하고, LRU(Least Recently Used) 교체 정책을 적용하는 방법을 살펴봅니다.
문제 개요
주어진 메모리 주소 스트림에 대해 캐시 히트/미스를 판정하고, 미스 발생 시 LRU 알고리즘으로 블록을 교체해야 합니 ...
5월 29일 10:03에 게시됨
C++ 표준 템플릿 라이브러리(STL) 핵심 알고리즘 가이드
1. 비수정 시퀀스 알고리즘
컨테이너의 데이터를 변경하지 않고 탐색이나 비교 작업을 수행하는 알고리즘입니다.
find, find_if, find_end
find: 특정 값과 일치하는 첫 번째 요소를 찾습니다.
find_if: 조건(서술자)을 만족하는 첫 번째 요소를 찾습니다.
find_end: 대상 범위 내에서 특정 서브 시퀀스가 마지막으로 나타나는 위치를 반환합니다.
vector&l ...
5월 26일 23:29에 게시됨
C++ 표준 라이브러리 알고리즘 완전 정리
비수정형 시퀀스 알고리즘
이들 알고리즘은 컨테이너의 요소를 변경하지 않고 탐색 또는 검사를 수행합니다.
요소 탐색: find 계열 함수
find(시작, 끝, 값): 지정된 값과 일치하는 첫 번째 요소의 반복자를 반환. 못 찾으면 end().
find_if(시작, 끝, 조건): 조건을 만족하는 첫 번째 요소를 찾음.
find_end(시작1, 끝1, 시작2, 끝2): 두 번째 범위의 시퀀스가 첫 ...
5월 26일 16:42에 게시됨
C++ vector 컨테이너 핵심 활용법
C++ 표준 라이브러리의 vector는 동적 배열을 구현한 시퀀스 컨테이너로, 크기가 자동으로 조절되는 가변 길이 배열입니다. 연속된 메모리 공간에 요소를 저장하므로 인덱스 기반 접근이 상수 시간에 가능하며, 필요에 따라 자동으로 저장 공간을 확장합니다.
기본 사용 준비
사용 전 해당 헤더를 포함해야 합니다.
#include <vector>
다양한 생성 및 초기화 방 ...
5월 24일 18:09에 게시됨