Map
특징
- 레드블랙트리(RB Tree) 기반, 모든 데이터는 정렬되어 저장
- 시간복잡도 O(log N) 보장
- key, value로 이루어지는 pair
- 탐색 가능 (searchable)
- 중복되지 않는 키들의 모임(key는 반드시 unique)
- value는 중복 가능
- key를 입력파라미터로 넣어줬을때, value가 리턴되는 구조로 동작
- value도 중복되지 않는 전제조건이 있다면<Key,Value><Value,Key>
- 반복문 간소화
Set
특징
- 순서 없음 (Unorderd)
- 중복되지 않는 값들의 모임
- 순열 Collection 방식이므로 map과 달리 key, value로 이루어지는 pair(쌍, 묶음)일 필요 X
- 삽입 순서대로 저장되지 않아 순서정보가 사라짐
- 일반적으로는 중복을 허용하지 않아 동일한 값 입력시 마지막 값 하나만 저장됨
- 하지만, 파이썬의경우 중복을 허용하는 SET이 기본이였던 적이 있음
- 사용처
- 중복된 값 거를때 (if문 등을 사용하지말고, 존재여부 판단을 위한 Lookup테이블? 등에 사용)
범위 기반 for문
고정 배열( 자료형 변수명[]
)이 아닌 std::vector
, std::list
, std::set
, std::map
에서도 사용 가능
1. for문
int fibonacci[] = { 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89 };
for (int number : fibonacci) // iterate over array fibonacci
cout << number << ' ';
- 루프는 각 array의 요소를 반복하여 선언된 변수(number)에 현재 배열 요소의 값을 할당
- 변수와 배열은 같은 자료형이어야 함. 다를 경우 형변환 발생
2. auto keyword for문
int fibonacci[] = { 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89 };
for (auto number : fibonacci) // iterate over array fibonacci
cout << number << ' ';
- auto 키워드를 통해 c++이 자료형을 추론하도록 함
3. auto keyword references for문
int fibonacci[] = { 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89 };
for (auto& number : fibonacci) // iterate over array fibonacci
cout << number << ' ';
- auto 키워드를 통해 c++이 자료형을 추론하도록 함
- 여기서 number는 현재 반복된 배열 요소에 대한 참조이므로 값이 복사되지 않음
- number변수 수정 시 배열의 요소에 영향을 미침
- 읽기 전용으로 사용할 경우 const로 선언
int fibonacci[] = { 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89 };
for (const auto& number : fibonacci) // iterate over array fibonacci
cout << number << ' ';
주의사항
포인터로 변환된 배열, new로 생성한 동적 배열에서는 범위 기반 for문을 사용할 수 없음.