SlideShare a Scribd company logo
STLvector list map
NHN NEXT
남현욱
맛보기
STL이 뭘까?
◆STL 은 Standard Template Library의 약자로,
‘많이 사용되는 자료구조와 알고리즘을 모아 놓은 라이브러리’라고 보면 된다.
◆링크드 리스트, 동적 배열, 트리, 스택, 큐 등 자료구조부터 검색, 정렬 등의 알
고리즘에 이르기까지 일반적으로 널리 이용되고 매번 구현이 비슷비슷한데
이 걸 매번 다시 만들어 쓰기 귀찮으니 모든 종류의 자료형에 대해 일반적으로
동작하도록 잘 만들어 둔 것이 바로 STL.
STL의 구성요소
STL의 구성요소
컨테이너
Containers
알고리즘
Algorithms어댑터
Adaptors
할당기
Allocators
반복자
Iterators
함수 객체
Functors
STL의 구성요소
뭔가 너무 많고
복잡하다
STL의 구성요소
어려우니까 우선 위에서 제시한 요소들 중 가장 중요한
◆ 컨테이너 ( Containers )
◆ 반복자 ( Iterators )
◆ 알고리즘 ( Algorithms )
세 가지를 중심으로 vector, list, map에 대해 알아 보자
컨테이너
컨테이너 Containers
컨테이너
= 그릇, 통
즉, 동일한 타입의 어떤 자료를
저장하고 관리하는 역할을 하는
것을 컨테이너라고 한다.
컨테이너 Containers
◆시퀀스 컨테이너 ( Sequence Container )
-자료의 선형적인 집합. STL에서는 vector, list 등을 제공한다.
◆연관 컨테이너 ( Associative Container )
-자료를 일정한 규칙에 따라 조직화하여 관리한다. STL에서는 set,map
등을 제공한다.
◆어댑터 컨테이너 ( Adapter Container )
-시퀀스 컨테이너를 변형하여 자료를 미리 일정하게 정해진 방식에 따라
관리한다. 자료를 넣고 빼는 순서를 외부에서 마음대로 조작할 수 없다.
STL에서는 stack, queue등을 제공한다.
컨테이너 Containers
우선 제일 쉬운 vector를 통해 컨테이너 맛만 살짝 보자
컨테이너 Containers
vector
쉽게 말해서 임의 타입에 대한 동적 배열이라고 보면 된다. 들어간 요소
의 개수에 맞게 알아서 메모리를 재할당해준다.
vector<Type> name(n);
의 형태로 Type형의 n개 크기 동적배열(vector) name을 생성할 수
있다.
컨테이너 Containers
예시)
컨테이너 Containers
예시)
결과
컨테이너 Containers
예시)
결과
입력받은 크기대로 배열을 할당하여 쓸 수 있으며, 일반
적인 배열을 쓰는 용법과 마찬가지로 사용할 수 있음을
알 수 있다.
또 실행 중간에 size() 함수를 이용해 현재 할당된 크기
가 얼마나 되는지도 확인할 수 있다.
반복자
반복자 Iterators
vector는 단순해서 반복자 없이도 어느 정도 사용할 수 있지만,
다른 복잡한 컨테이너들을 다루기 위해서는 반복자가 필수적이다.
다른 컨테이너들을 배우기 전에 우선 반복자에 대해서 알아보자.
반복자 Iterators
그런데 반복자의 개념에 대해
논하기 전에 먼저,
컨테이너를 순회하는 방법에는
뭐가 있을까?
반복자 Iterators
동적 배열 요소 순회하며 출력
링크드 리스트요소 순회하며 출력
반복자 Iterators
동적 배열 요소 순회하며 출력
링크드 리스트요소 순회하며 출력
컨테이너 종류가 달라지면
순회하는 방법도 달라진다.
반복자 Iterators
동적 배열 요소 순회하며 출력
링크드 리스트요소 순회하며 출력
컨테이너 종류가 달라지면
순회하는 방법도 달라진다.
근데 수많은 컨테이너들을
모두 순회방법을 다르게 만들자니
너무 복잡하고 어렵다!
반복자 Iterators
그래서 등장한 것이 바로 반복자
반복자 Iterators
반복자의 특징
1) 컨테이너의 요소 하나를 가리키는 기본적인 역할을 한다.
2) 가리키는 지점의 요소를 읽고 쓸 수 있다.
→ 내용을 읽는 * 연산자가 정의된다.
3) 증감에 의해 주변 요소로 이동할 수 있다.
→ ++, -- 등의 연산자가 정의된다.
4) 반복자끼리 대입,비교가 가능해야 한다.
→ 대입, 비교 연산자가 정의된다.
반복자 Iterators
반복자의 특징
1) 컨테이너의 요소 하나를 가리키는 기본적인 역할을 한다.
2) 가리키는 지점의 요소를 읽고 쓸 수 있다.
→ 내용을 읽는 * 연산자가 정의된다.
3) 증감에 의해 주변 요소로 이동할 수 있다.
→ ++, -- 등의 연산자가 정의된다.
4) 반복자끼리 대입,비교가 가능해야 한다.
→ 대입, 비교 연산자가 정의된다.
...어라? 포인터랑 비슷하네?
반복자 Iterators
반복자는 포인터의 일반화된 개념
이라고 생각하면 이해하기 편하다
반복자 Iterators
가장 간단한 vector 컨테이너를 통해 반복자의 활용 방법을 알아보자
반복자 Iterators
가장 간단한 vector 컨테이너를 통해 반복자의 활용 방법을 알아보자
배열 ari의 0번째 요소부터 ari의 5번째
요소 직전까지 연속한 요소들로 vi를 초기
화 하겠다는 구문
반복자 Iterators
가장 간단한 vector 컨테이너를 통해 반복자의 활용 방법을 알아보자
배열 ari의 0번째 요소부터 ari의 5번째
요소 직전까지 연속한 요소들로 vi를 초기
화 하겠다는 구문
vector 컨테이너의 반복자를 선언하는 방법.
기타 컨테이너도 방식은 동일하다.
vector<Type>::iterator Name;의 형태로
선언.
반복자 Iterators
가장 간단한 vector 컨테이너를 통해 반복자의 활용 방법을 알아보자
배열 ari의 0번째 요소부터 ari의 5번째
요소 직전까지 연속한 요소들로 vi를 초기
화 하겠다는 구문
vector 컨테이너의 반복자를 선언하는 방법.
기타 컨테이너도 방식은 동일하다.
vector<Type>::iterator Name;의 형태로
선언.
for문을 보면 생소한 vi.begin() , vi.end()라는 문구가 나온다. vi.begin()은 컨테이너의
가장 첫번째 요소를 가리키는 것이고, vi.end()는 컨테이너의 마지막 요소의 다음 요소를 가
리키는 것이다.
즉 vi.begin()에서 시작하여 반복자 it를 vi.end()가 될 때까지 반복문을 돌리면 컨테이너의
모든 요소를 내부 구현 방식에 상관없이 일관성 있게 순회할 수 있는 것이다.
반복자 Iterators
가장 간단한 vector 컨테이너를 통해 반복자의 활용 방법을 알아보자
배열 ari의 0번째 요소부터 ari의 5번째
요소 직전까지 연속한 요소들로 vi를 초기
화 하겠다는 구문
vector 컨테이너의 반복자를 선언하는 방법.
기타 컨테이너도 방식은 동일하다.
vector<Type>::iterator Name;의 형태로
선언.
for문을 보면 생소한 vi.begin() , vi.end()라는 문구가 나온다. vi.begin()은 컨테이너의
가장 첫번째 요소를 가리키는 것이고, vi.end()는 컨테이너의 마지막 요소의 다음 요소를 가
리키는 것이다.
즉 vi.begin()에서 시작하여 반복자 it를 vi.end()가 될 때까지 반복문을 돌리면 컨테이너의
모든 요소를 내부 구현 방식에 상관없이 일관성 있게 순회할 수 있는 것이다.
결과
반복자 Iterators
이제 반복자의 개념도 대충 알았으니
vector보다 조금 더 복잡한
list 컨테이너에 대해 알아보자
반복자 Iterators
list
list는 이중 링크드 리스트로 구현된 컨테이너다. 흔히 알려진 것처럼 삽
입, 삭제는 굉장히 빠르지만 요소를 순회하는 것은 느린 자료구조이다.
list<Type> Name;
의 형태로 Type 형태의 list(이중 링크드 리스트) Name을
선언할 수 있다.
반복자 Iterators
활용 예시
반복자 Iterators
활용 예시
push_back()함수를 통해 list의 맨 마지막에
요소를 삽입할 수 있다. 이중 연결리스트이므로
O(1) 시간 만에 삽입 연산이 수행된다.
반복자 Iterators
활용 예시
push_back()함수를 통해 list의 맨 마지막에
요소를 삽입할 수 있다. 이중 연결리스트이므로
O(1) 시간 만에 삽입 연산이 수행된다.
list<Type>::iterator를 통해 vector와 완전히 동일한 방식으
로 내부 요소를 모두 순회하고 있다. 이렇게 서로 다른 내부 구
조를 지닌 컨테이너라 할 지라도 동일하게 일반화된 방법으로
순회할 수 있다는 것이 STL의 강점이다.
반복자 Iterators
활용 예시
push_back()함수를 통해 list의 맨 마지막에
요소를 삽입할 수 있다. 이중 연결리스트이므로
O(1) 시간 만에 삽입 연산이 수행된다.
list<Type>::iterator를 통해 vector와 완전히 동일한 방식으
로 내부 요소를 모두 순회하고 있다. 이렇게 서로 다른 내부 구
조를 지닌 컨테이너라 할 지라도 동일하게 일반화된 방법으로
순회할 수 있다는 것이 STL의 강점이다.
반복자 Iterators
map
map은 연관이 있는 두 개의 값을 키(key)와 값(value)의 쌍으로 관리
하는 컨테이너다.
map은 저장되는 데이터가 항상 정렬이 되어 있다는 특징을 갖고 있다.
따라서 많은 크기의 데이터를 저장하고, 검색을 빨리 해야하는 경우
map을 굉장히 유용하게 사용할 수 있다.
반복자 Iterators
그런데 이 때 map에서 key와 value가
의미하는 것이 각각 뭘까?
반복자 Iterators
key는 정렬과 참조를 위한 정보
value는 실제로 저장하고 싶은 자료
라고 생각하면 편하다.
그런데 이 때 map에서 key와 value가
의미하는 것이 각각 뭘까?
반복자 Iterators
key는 정렬과 참조를 위한 정보
value는 실제로 저장하고 싶은 자료
라고 생각하면 편하다.
예를 들어 NHN NEXT 학생들의
정보를 저장한다고 하면,
key는 학생들의 학번
value는 각 학생과 관련된 정보
가 될 것이다.
그런데 이 때 map에서 key와 value가
의미하는 것이 각각 뭘까?
반복자 Iterators
그런데 잠깐,
지금까지는 하나의 값만 다루는 컨테이너를 썼는데
map은 두 개의 값을 같이 다룬다.
어떻게 두 개의 값을 같이 다룰 수 있지?
반복자 Iterators
그런데 잠깐,
지금까지는 하나의 값만 다루는 컨테이너를 썼는데
map은 두 개의 값을 같이 다룬다.
어떻게 두 개의 값을 같이 다룰 수 있지?
STL에서는 이를 위해 pair라는 자료형을 제공한다.
반복자 Iterators
pair
pair는 두 개의 값을 하나로 묶어 관리할 수 있게 해준다.
pair<Type1, Type2> Name;
의 형태로 Type1 형태의 자료와 Type2 형태의 자료를 하나로 묶은 쌍
Name을 선언할 수 있다.
반복자 Iterators
활용 예시
반복자 Iterators
활용 예시
int 타입과 string 타입 두 개를 묶은 한
쌍을 나타내는 pair인 student의 선언
반복자 Iterators
활용 예시
int 타입과 string 타입 두 개를 묶은 한
쌍을 나타내는 pair인 student의 선언
pair자료형에서 first와 second는 각각
pair의 첫 번째 요소와 두 번째 요소를 가
리킨다.
반복자 Iterators
활용 예시
int 타입과 string 타입 두 개를 묶은 한
쌍을 나타내는 pair인 student의 선언
pair자료형에서 first와 second는 각각
pair의 첫 번째 요소와 두 번째 요소를 가
리킨다.
실행 결과는 간단하므로 생략
반복자 Iterators
◆map은 pair를 이용해 한 쌍으로 묶은 정보( < key, value >의 형태 )
를 이용해 데이터를 저장한다.
◆map은 내부적으로 균형잡힌 이진 트리(balanced binary tree)로
구현되어 있다(정확히는 레드-블랙 트리 Red-Black tree).
이 때 key는 이진 트리를 정렬하고 이진 트리의 각 요소에 접근하기
위한 값으로 쓰이며, value는 실제로 저장된 값으로 쓰인다.
따라서 당연히 map에서 key는 절대 중복되어서는 안 된다.
◆균형잡힌 이진 트리는 검색 속도가 O(log n)임이 보장되기 때문에
map이 굉장히 빠른 검색 속도를 가지는 것이다.
Map은 이런 것이다!
반복자 Iterators
활용 예시
반복자 Iterators
활용 예시
각 도시의 이름을 key로, 인구수를
value로 하는 map m을 선언했다.
반복자 Iterators
활용 예시
각 도시의 이름을 key로, 인구수를
value로 하는 map m을 선언했다.
insert 함수를 통해 한 쌍의 데이터
(pair)를 map에 저장할 수 있다.
map은 내부적으로 자료를 정렬하여
관리하므로 이 자료가 어느 위치에 저
장될지는 알 수 없다.
반복자 Iterators
활용 예시
각 도시의 이름을 key로, 인구수를
value로 하는 map m을 선언했다.
insert 함수를 통해 한 쌍의 데이터
(pair)를 map에 저장할 수 있다.
map은 내부적으로 자료를 정렬하여
관리하므로 이 자료가 어느 위치에 저
장될지는 알 수 없다.
왼쪽과 같이 익숙한 배열의 형태로도 데이터를 삽
입할 수 있다. map[key] = value; 의 형태로 쓰
면 map에 key,value 쌍의 데이터가 삽입되고,
map[key]라고 쓰면 해당 map에서 key에 해당
하는(key와 한 쌍인) value 값을 얻을 수 있다.
반복자 Iterators
활용 예시
각 도시의 이름을 key로, 인구수를
value로 하는 map m을 선언했다.
insert 함수를 통해 한 쌍의 데이터
(pair)를 map에 저장할 수 있다.
map은 내부적으로 자료를 정렬하여
관리하므로 이 자료가 어느 위치에 저
장될지는 알 수 없다.
왼쪽과 같이 익숙한 배열의 형태로도 데이터를 삽
입할 수 있다. map[key] = value; 의 형태로 쓰
면 map에 key,value 쌍의 데이터가 삽입되고,
map[key]라고 쓰면 해당 map에서 key에 해당
하는(key와 한 쌍인) value 값을 얻을 수 있다.
지울 때는 erase 함수를 쓰며, 반복자 또는 특정 key
값을 통해 해당 key에 해당하는 value 한 쌍을 삭제
할 수 있다. value 값으로는 삭제할 수 없다. map의
삽입, 삭제 및 참조의 모든 기준은 key이다.
반복자 Iterators
활용 예시
각 도시의 이름을 key로, 인구수를
value로 하는 map m을 선언했다.
insert 함수를 통해 한 쌍의 데이터
(pair)를 map에 저장할 수 있다.
map은 내부적으로 자료를 정렬하여
관리하므로 이 자료가 어느 위치에 저
장될지는 알 수 없다.
왼쪽과 같이 익숙한 배열의 형태로도 데이터를 삽
입할 수 있다. map[key] = value; 의 형태로 쓰
면 map에 key,value 쌍의 데이터가 삽입되고,
map[key]라고 쓰면 해당 map에서 key에 해당
하는(key와 한 쌍인) value 값을 얻을 수 있다.
지울 때는 erase 함수를 쓰며, 반복자 또는 특정 key
값을 통해 해당 key에 해당하는 value 한 쌍을 삭제
할 수 있다. value 값으로는 삭제할 수 없다. map의
삽입, 삭제 및 참조의 모든 기준은 key이다.
다른 컨테이너와 거의
완전히 똑같은 방식으
로 반복자를 이용해 컨
테이너 내부의 모든 요
소를 순회할 수 있다.
반복자 Iterators
활용 예시
각 도시의 이름을 key로, 인구수를
value로 하는 map m을 선언했다.
insert 함수를 통해 한 쌍의 데이터
(pair)를 map에 저장할 수 있다.
map은 내부적으로 자료를 정렬하여
관리하므로 이 자료가 어느 위치에 저
장될지는 알 수 없다.
왼쪽과 같이 익숙한 배열의 형태로도 데이터를 삽
입할 수 있다. map[key] = value; 의 형태로 쓰
면 map에 key,value 쌍의 데이터가 삽입되고,
map[key]라고 쓰면 해당 map에서 key에 해당
하는(key와 한 쌍인) value 값을 얻을 수 있다.
지울 때는 erase 함수를 쓰며, 반복자 또는 특정 key
값을 통해 해당 key에 해당하는 value 한 쌍을 삭제
할 수 있다. value 값으로는 삭제할 수 없다. map의
삽입, 삭제 및 참조의 모든 기준은 key이다.
다른 컨테이너와 거의
완전히 똑같은 방식으
로 반복자를 이용해 컨
테이너 내부의 모든 요
소를 순회할 수 있다.
왜 이런 결과가 나올까?
반복자 Iterators
활용 예시
각 도시의 이름을 key로, 인구수를
value로 하는 map m을 선언했다.
insert 함수를 통해 한 쌍의 데이터
(pair)를 map에 저장할 수 있다.
map은 내부적으로 자료를 정렬하여
관리하므로 이 자료가 어느 위치에 저
장될지는 알 수 없다.
왼쪽과 같이 익숙한 배열의 형태로도 데이터를 삽
입할 수 있다. map[key] = value; 의 형태로 쓰
면 map에 key,value 쌍의 데이터가 삽입되고,
map[key]라고 쓰면 해당 map에서 key에 해당
하는(key와 한 쌍인) value 값을 얻을 수 있다.
지울 때는 erase 함수를 쓰며, 반복자 또는 특정 key
값을 통해 해당 key에 해당하는 value 한 쌍을 삭제
할 수 있다. value 값으로는 삭제할 수 없다. map의
삽입, 삭제 및 참조의 모든 기준은 key이다.
다른 컨테이너와 거의
완전히 똑같은 방식으
로 반복자를 이용해 컨
테이너 내부의 모든 요
소를 순회할 수 있다.
왜 이런 결과가 나올까?
내부 자료들을 정렬해서 저장한다는
map의 특성을 염두에 두고 코드를 분
석해보자
알고리즘
알고리즘
까지 다루려니 분량이 너무 많아져서 생략. 알고리즘은 다음 기회에...
컨테이너와 반복자의 기본적인 개념 및 활용 방법을 알아보았다.
그러나 여기서 다룬 내용은 굉장히 기초적인 부분들이므로
더 자세하고 깊이 있는 내용은 뒤의 참고자료를 통해 알아보도록 하자.
마무리
참고 자료 normative Reference
◆ soen.kr C++ STL 문법 관련 자료.
◆ http://goo.gl/nX1WS9 한빛 미디어의 STL e-book(무료).
그리고 기타 시중에 많이 나와 있는 좋은 STL 도서들...
감사합니다

More Related Content

What's hot

Windows via c++ chapter6
Windows via c++   chapter6Windows via c++   chapter6
Windows via c++ chapter6
Shin heemin
 
파이썬 크롤링 모듈
파이썬 크롤링 모듈파이썬 크롤링 모듈
파이썬 크롤링 모듈
Yong Joon Moon
 
이것이 자바다 Chap. 6 클래스(CLASS)(KOR)
이것이 자바다 Chap. 6 클래스(CLASS)(KOR)이것이 자바다 Chap. 6 클래스(CLASS)(KOR)
이것이 자바다 Chap. 6 클래스(CLASS)(KOR)
MIN SEOK KOO
 
이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)
이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)
이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)
MIN SEOK KOO
 
Python+numpy pandas 1편
Python+numpy pandas 1편Python+numpy pandas 1편
Python+numpy pandas 1편
Yong Joon Moon
 
Start IoT with JavaScript - 5.객체2
Start IoT with JavaScript - 5.객체2Start IoT with JavaScript - 5.객체2
Start IoT with JavaScript - 5.객체2
Park Jonggun
 
파이썬정리 20160130
파이썬정리 20160130파이썬정리 20160130
파이썬정리 20160130
Yong Joon Moon
 
Start IoT with JavaScript - 4.객체1
Start IoT with JavaScript - 4.객체1Start IoT with JavaScript - 4.객체1
Start IoT with JavaScript - 4.객체1
Park Jonggun
 
Start IoT with JavaScript - 2.연산자
Start IoT with JavaScript - 2.연산자Start IoT with JavaScript - 2.연산자
Start IoT with JavaScript - 2.연산자
Park Jonggun
 
Reflect package 사용하기
Reflect package 사용하기Reflect package 사용하기
Reflect package 사용하기
Yong Joon Moon
 
Swift 0x17 generics
Swift 0x17 genericsSwift 0x17 generics
Swift 0x17 generics
Hyun Jin Moon
 
텐서플로우 기초 이해하기
텐서플로우 기초 이해하기 텐서플로우 기초 이해하기
텐서플로우 기초 이해하기
Yong Joon Moon
 
Python+numpy pandas 3편
Python+numpy pandas 3편Python+numpy pandas 3편
Python+numpy pandas 3편
Yong Joon Moon
 
Python_numpy_pandas_matplotlib 이해하기_20160815
Python_numpy_pandas_matplotlib 이해하기_20160815Python_numpy_pandas_matplotlib 이해하기_20160815
Python_numpy_pandas_matplotlib 이해하기_20160815
Yong Joon Moon
 
Binary Search
Binary SearchBinary Search
Binary Search
skku_npc
 
Python+numpy pandas 4편
Python+numpy pandas 4편Python+numpy pandas 4편
Python+numpy pandas 4편
Yong Joon Moon
 
Python array.array 모듈 이해하기
Python array.array 모듈 이해하기Python array.array 모듈 이해하기
Python array.array 모듈 이해하기
Yong Joon Moon
 
Data Structures
Data StructuresData Structures
Data Structures
skku_npc
 

What's hot (20)

Windows via c++ chapter6
Windows via c++   chapter6Windows via c++   chapter6
Windows via c++ chapter6
 
파이썬 크롤링 모듈
파이썬 크롤링 모듈파이썬 크롤링 모듈
파이썬 크롤링 모듈
 
이것이 자바다 Chap. 6 클래스(CLASS)(KOR)
이것이 자바다 Chap. 6 클래스(CLASS)(KOR)이것이 자바다 Chap. 6 클래스(CLASS)(KOR)
이것이 자바다 Chap. 6 클래스(CLASS)(KOR)
 
이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)
이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)
이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)
 
Python+numpy pandas 1편
Python+numpy pandas 1편Python+numpy pandas 1편
Python+numpy pandas 1편
 
Start IoT with JavaScript - 5.객체2
Start IoT with JavaScript - 5.객체2Start IoT with JavaScript - 5.객체2
Start IoT with JavaScript - 5.객체2
 
파이썬정리 20160130
파이썬정리 20160130파이썬정리 20160130
파이썬정리 20160130
 
Start IoT with JavaScript - 4.객체1
Start IoT with JavaScript - 4.객체1Start IoT with JavaScript - 4.객체1
Start IoT with JavaScript - 4.객체1
 
Start IoT with JavaScript - 2.연산자
Start IoT with JavaScript - 2.연산자Start IoT with JavaScript - 2.연산자
Start IoT with JavaScript - 2.연산자
 
Reflect package 사용하기
Reflect package 사용하기Reflect package 사용하기
Reflect package 사용하기
 
Swift 0x17 generics
Swift 0x17 genericsSwift 0x17 generics
Swift 0x17 generics
 
텐서플로우 기초 이해하기
텐서플로우 기초 이해하기 텐서플로우 기초 이해하기
텐서플로우 기초 이해하기
 
Iterator pattern
Iterator patternIterator pattern
Iterator pattern
 
Python+numpy pandas 3편
Python+numpy pandas 3편Python+numpy pandas 3편
Python+numpy pandas 3편
 
Python_numpy_pandas_matplotlib 이해하기_20160815
Python_numpy_pandas_matplotlib 이해하기_20160815Python_numpy_pandas_matplotlib 이해하기_20160815
Python_numpy_pandas_matplotlib 이해하기_20160815
 
Gpg1
Gpg1Gpg1
Gpg1
 
Binary Search
Binary SearchBinary Search
Binary Search
 
Python+numpy pandas 4편
Python+numpy pandas 4편Python+numpy pandas 4편
Python+numpy pandas 4편
 
Python array.array 모듈 이해하기
Python array.array 모듈 이해하기Python array.array 모듈 이해하기
Python array.array 모듈 이해하기
 
Data Structures
Data StructuresData Structures
Data Structures
 

Similar to Stl vector, list, map

Scala 기초 (4)
Scala 기초 (4)Scala 기초 (4)
Scala 기초 (4)
명성 정
 
[Commit Again] 1주차 STL study
[Commit Again] 1주차 STL study[Commit Again] 1주차 STL study
[Commit Again] 1주차 STL study
경 송
 
개경프 1주차 Stl study
개경프 1주차 Stl study개경프 1주차 Stl study
개경프 1주차 Stl study
경 송
 
자바로 배우는 자료구조
자바로 배우는 자료구조자바로 배우는 자료구조
자바로 배우는 자료구조
중선 곽
 
Java(4/4)
Java(4/4)Java(4/4)
Java(4/4)
handfoot
 
Light Tutorial Python
Light Tutorial PythonLight Tutorial Python
Light Tutorial Python
Kwangyoun Jung
 
Haskell study 2
Haskell study 2Haskell study 2
Haskell study 2
Nam Hyeonuk
 
파이썬+주요+용어+정리 20160304
파이썬+주요+용어+정리 20160304파이썬+주요+용어+정리 20160304
파이썬+주요+용어+정리 20160304
Yong Joon Moon
 
Tensorflow
TensorflowTensorflow
Tensorflow
chs71
 
C++ Template/STL study
C++ Template/STL studyC++ Template/STL study
C++ Template/STL study
Seo Dong-yu
 
파이썬+데이터+구조+이해하기 20160311
파이썬+데이터+구조+이해하기 20160311파이썬+데이터+구조+이해하기 20160311
파이썬+데이터+구조+이해하기 20160311
Yong Joon Moon
 
파이썬 숫자,변수,문자열
파이썬 숫자,변수,문자열파이썬 숫자,변수,문자열
파이썬 숫자,변수,문자열
HoYong Na
 
[Swift] Iterator
[Swift] Iterator[Swift] Iterator
[Swift] Iterator
Bill Kim
 
Haskell study 6
Haskell study 6Haskell study 6
Haskell study 6
Nam Hyeonuk
 
STL.doc
STL.docSTL.doc
STL.doc
Daniel Shin
 
스칼라와 스파크 영혼의 듀오
스칼라와 스파크 영혼의 듀오스칼라와 스파크 영혼의 듀오
스칼라와 스파크 영혼의 듀오
Taeoh Kim
 
R 기초 : R Basics
R 기초 : R BasicsR 기초 : R Basics
R 기초 : R Basics
Yoonwhan Lee
 

Similar to Stl vector, list, map (20)

Scala 기초 (4)
Scala 기초 (4)Scala 기초 (4)
Scala 기초 (4)
 
[Commit Again] 1주차 STL study
[Commit Again] 1주차 STL study[Commit Again] 1주차 STL study
[Commit Again] 1주차 STL study
 
개경프 1주차 Stl study
개경프 1주차 Stl study개경프 1주차 Stl study
개경프 1주차 Stl study
 
자바로 배우는 자료구조
자바로 배우는 자료구조자바로 배우는 자료구조
자바로 배우는 자료구조
 
강의자료3
강의자료3강의자료3
강의자료3
 
Java(4/4)
Java(4/4)Java(4/4)
Java(4/4)
 
Light Tutorial Python
Light Tutorial PythonLight Tutorial Python
Light Tutorial Python
 
Haskell study 2
Haskell study 2Haskell study 2
Haskell study 2
 
Apply교육
Apply교육Apply교육
Apply교육
 
파이썬+주요+용어+정리 20160304
파이썬+주요+용어+정리 20160304파이썬+주요+용어+정리 20160304
파이썬+주요+용어+정리 20160304
 
Tensorflow
TensorflowTensorflow
Tensorflow
 
C++ Template/STL study
C++ Template/STL studyC++ Template/STL study
C++ Template/STL study
 
파이썬+데이터+구조+이해하기 20160311
파이썬+데이터+구조+이해하기 20160311파이썬+데이터+구조+이해하기 20160311
파이썬+데이터+구조+이해하기 20160311
 
2012 Ds 02
2012 Ds 022012 Ds 02
2012 Ds 02
 
파이썬 숫자,변수,문자열
파이썬 숫자,변수,문자열파이썬 숫자,변수,문자열
파이썬 숫자,변수,문자열
 
[Swift] Iterator
[Swift] Iterator[Swift] Iterator
[Swift] Iterator
 
Haskell study 6
Haskell study 6Haskell study 6
Haskell study 6
 
STL.doc
STL.docSTL.doc
STL.doc
 
스칼라와 스파크 영혼의 듀오
스칼라와 스파크 영혼의 듀오스칼라와 스파크 영혼의 듀오
스칼라와 스파크 영혼의 듀오
 
R 기초 : R Basics
R 기초 : R BasicsR 기초 : R Basics
R 기초 : R Basics
 

More from Nam Hyeonuk

Next 게임 실전 프로젝트 슬라이드
Next 게임 실전 프로젝트 슬라이드Next 게임 실전 프로젝트 슬라이드
Next 게임 실전 프로젝트 슬라이드
Nam Hyeonuk
 
Haskell study 15
Haskell study 15Haskell study 15
Haskell study 15
Nam Hyeonuk
 
Haskell study 14
Haskell study 14Haskell study 14
Haskell study 14
Nam Hyeonuk
 
Haskell study 13
Haskell study 13Haskell study 13
Haskell study 13
Nam Hyeonuk
 
Haskell study 12
Haskell study 12Haskell study 12
Haskell study 12
Nam Hyeonuk
 
Haskell study 11
Haskell study 11Haskell study 11
Haskell study 11
Nam Hyeonuk
 
Haskell study 10
Haskell study 10Haskell study 10
Haskell study 10
Nam Hyeonuk
 
Haskell study 9
Haskell study 9Haskell study 9
Haskell study 9
Nam Hyeonuk
 
Haskell study 8
Haskell study 8Haskell study 8
Haskell study 8
Nam Hyeonuk
 
Haskell study 7
Haskell study 7Haskell study 7
Haskell study 7
Nam Hyeonuk
 
Haskell study 5
Haskell study 5Haskell study 5
Haskell study 5
Nam Hyeonuk
 
Haskell study 4
Haskell study 4Haskell study 4
Haskell study 4
Nam Hyeonuk
 
Haskell study 3
Haskell study 3Haskell study 3
Haskell study 3
Nam Hyeonuk
 
Haskell study 1
Haskell study 1Haskell study 1
Haskell study 1
Nam Hyeonuk
 
Haskell study 0
Haskell study 0Haskell study 0
Haskell study 0
Nam Hyeonuk
 
Multi thread
Multi threadMulti thread
Multi thread
Nam Hyeonuk
 
Memory & object pooling
Memory & object poolingMemory & object pooling
Memory & object pooling
Nam Hyeonuk
 
Database
DatabaseDatabase
Database
Nam Hyeonuk
 
Exception&log
Exception&logException&log
Exception&log
Nam Hyeonuk
 
Iocp advanced
Iocp advancedIocp advanced
Iocp advanced
Nam Hyeonuk
 

More from Nam Hyeonuk (20)

Next 게임 실전 프로젝트 슬라이드
Next 게임 실전 프로젝트 슬라이드Next 게임 실전 프로젝트 슬라이드
Next 게임 실전 프로젝트 슬라이드
 
Haskell study 15
Haskell study 15Haskell study 15
Haskell study 15
 
Haskell study 14
Haskell study 14Haskell study 14
Haskell study 14
 
Haskell study 13
Haskell study 13Haskell study 13
Haskell study 13
 
Haskell study 12
Haskell study 12Haskell study 12
Haskell study 12
 
Haskell study 11
Haskell study 11Haskell study 11
Haskell study 11
 
Haskell study 10
Haskell study 10Haskell study 10
Haskell study 10
 
Haskell study 9
Haskell study 9Haskell study 9
Haskell study 9
 
Haskell study 8
Haskell study 8Haskell study 8
Haskell study 8
 
Haskell study 7
Haskell study 7Haskell study 7
Haskell study 7
 
Haskell study 5
Haskell study 5Haskell study 5
Haskell study 5
 
Haskell study 4
Haskell study 4Haskell study 4
Haskell study 4
 
Haskell study 3
Haskell study 3Haskell study 3
Haskell study 3
 
Haskell study 1
Haskell study 1Haskell study 1
Haskell study 1
 
Haskell study 0
Haskell study 0Haskell study 0
Haskell study 0
 
Multi thread
Multi threadMulti thread
Multi thread
 
Memory & object pooling
Memory & object poolingMemory & object pooling
Memory & object pooling
 
Database
DatabaseDatabase
Database
 
Exception&log
Exception&logException&log
Exception&log
 
Iocp advanced
Iocp advancedIocp advanced
Iocp advanced
 

Stl vector, list, map

  • 1. STLvector list map NHN NEXT 남현욱 맛보기
  • 2. STL이 뭘까? ◆STL 은 Standard Template Library의 약자로, ‘많이 사용되는 자료구조와 알고리즘을 모아 놓은 라이브러리’라고 보면 된다. ◆링크드 리스트, 동적 배열, 트리, 스택, 큐 등 자료구조부터 검색, 정렬 등의 알 고리즘에 이르기까지 일반적으로 널리 이용되고 매번 구현이 비슷비슷한데 이 걸 매번 다시 만들어 쓰기 귀찮으니 모든 종류의 자료형에 대해 일반적으로 동작하도록 잘 만들어 둔 것이 바로 STL.
  • 5. STL의 구성요소 뭔가 너무 많고 복잡하다
  • 6. STL의 구성요소 어려우니까 우선 위에서 제시한 요소들 중 가장 중요한 ◆ 컨테이너 ( Containers ) ◆ 반복자 ( Iterators ) ◆ 알고리즘 ( Algorithms ) 세 가지를 중심으로 vector, list, map에 대해 알아 보자
  • 8. 컨테이너 Containers 컨테이너 = 그릇, 통 즉, 동일한 타입의 어떤 자료를 저장하고 관리하는 역할을 하는 것을 컨테이너라고 한다.
  • 9. 컨테이너 Containers ◆시퀀스 컨테이너 ( Sequence Container ) -자료의 선형적인 집합. STL에서는 vector, list 등을 제공한다. ◆연관 컨테이너 ( Associative Container ) -자료를 일정한 규칙에 따라 조직화하여 관리한다. STL에서는 set,map 등을 제공한다. ◆어댑터 컨테이너 ( Adapter Container ) -시퀀스 컨테이너를 변형하여 자료를 미리 일정하게 정해진 방식에 따라 관리한다. 자료를 넣고 빼는 순서를 외부에서 마음대로 조작할 수 없다. STL에서는 stack, queue등을 제공한다.
  • 10. 컨테이너 Containers 우선 제일 쉬운 vector를 통해 컨테이너 맛만 살짝 보자
  • 11. 컨테이너 Containers vector 쉽게 말해서 임의 타입에 대한 동적 배열이라고 보면 된다. 들어간 요소 의 개수에 맞게 알아서 메모리를 재할당해준다. vector<Type> name(n); 의 형태로 Type형의 n개 크기 동적배열(vector) name을 생성할 수 있다.
  • 14. 컨테이너 Containers 예시) 결과 입력받은 크기대로 배열을 할당하여 쓸 수 있으며, 일반 적인 배열을 쓰는 용법과 마찬가지로 사용할 수 있음을 알 수 있다. 또 실행 중간에 size() 함수를 이용해 현재 할당된 크기 가 얼마나 되는지도 확인할 수 있다.
  • 16. 반복자 Iterators vector는 단순해서 반복자 없이도 어느 정도 사용할 수 있지만, 다른 복잡한 컨테이너들을 다루기 위해서는 반복자가 필수적이다. 다른 컨테이너들을 배우기 전에 우선 반복자에 대해서 알아보자.
  • 17. 반복자 Iterators 그런데 반복자의 개념에 대해 논하기 전에 먼저, 컨테이너를 순회하는 방법에는 뭐가 있을까?
  • 18. 반복자 Iterators 동적 배열 요소 순회하며 출력 링크드 리스트요소 순회하며 출력
  • 19. 반복자 Iterators 동적 배열 요소 순회하며 출력 링크드 리스트요소 순회하며 출력 컨테이너 종류가 달라지면 순회하는 방법도 달라진다.
  • 20. 반복자 Iterators 동적 배열 요소 순회하며 출력 링크드 리스트요소 순회하며 출력 컨테이너 종류가 달라지면 순회하는 방법도 달라진다. 근데 수많은 컨테이너들을 모두 순회방법을 다르게 만들자니 너무 복잡하고 어렵다!
  • 21. 반복자 Iterators 그래서 등장한 것이 바로 반복자
  • 22. 반복자 Iterators 반복자의 특징 1) 컨테이너의 요소 하나를 가리키는 기본적인 역할을 한다. 2) 가리키는 지점의 요소를 읽고 쓸 수 있다. → 내용을 읽는 * 연산자가 정의된다. 3) 증감에 의해 주변 요소로 이동할 수 있다. → ++, -- 등의 연산자가 정의된다. 4) 반복자끼리 대입,비교가 가능해야 한다. → 대입, 비교 연산자가 정의된다.
  • 23. 반복자 Iterators 반복자의 특징 1) 컨테이너의 요소 하나를 가리키는 기본적인 역할을 한다. 2) 가리키는 지점의 요소를 읽고 쓸 수 있다. → 내용을 읽는 * 연산자가 정의된다. 3) 증감에 의해 주변 요소로 이동할 수 있다. → ++, -- 등의 연산자가 정의된다. 4) 반복자끼리 대입,비교가 가능해야 한다. → 대입, 비교 연산자가 정의된다. ...어라? 포인터랑 비슷하네?
  • 24. 반복자 Iterators 반복자는 포인터의 일반화된 개념 이라고 생각하면 이해하기 편하다
  • 25. 반복자 Iterators 가장 간단한 vector 컨테이너를 통해 반복자의 활용 방법을 알아보자
  • 26. 반복자 Iterators 가장 간단한 vector 컨테이너를 통해 반복자의 활용 방법을 알아보자 배열 ari의 0번째 요소부터 ari의 5번째 요소 직전까지 연속한 요소들로 vi를 초기 화 하겠다는 구문
  • 27. 반복자 Iterators 가장 간단한 vector 컨테이너를 통해 반복자의 활용 방법을 알아보자 배열 ari의 0번째 요소부터 ari의 5번째 요소 직전까지 연속한 요소들로 vi를 초기 화 하겠다는 구문 vector 컨테이너의 반복자를 선언하는 방법. 기타 컨테이너도 방식은 동일하다. vector<Type>::iterator Name;의 형태로 선언.
  • 28. 반복자 Iterators 가장 간단한 vector 컨테이너를 통해 반복자의 활용 방법을 알아보자 배열 ari의 0번째 요소부터 ari의 5번째 요소 직전까지 연속한 요소들로 vi를 초기 화 하겠다는 구문 vector 컨테이너의 반복자를 선언하는 방법. 기타 컨테이너도 방식은 동일하다. vector<Type>::iterator Name;의 형태로 선언. for문을 보면 생소한 vi.begin() , vi.end()라는 문구가 나온다. vi.begin()은 컨테이너의 가장 첫번째 요소를 가리키는 것이고, vi.end()는 컨테이너의 마지막 요소의 다음 요소를 가 리키는 것이다. 즉 vi.begin()에서 시작하여 반복자 it를 vi.end()가 될 때까지 반복문을 돌리면 컨테이너의 모든 요소를 내부 구현 방식에 상관없이 일관성 있게 순회할 수 있는 것이다.
  • 29. 반복자 Iterators 가장 간단한 vector 컨테이너를 통해 반복자의 활용 방법을 알아보자 배열 ari의 0번째 요소부터 ari의 5번째 요소 직전까지 연속한 요소들로 vi를 초기 화 하겠다는 구문 vector 컨테이너의 반복자를 선언하는 방법. 기타 컨테이너도 방식은 동일하다. vector<Type>::iterator Name;의 형태로 선언. for문을 보면 생소한 vi.begin() , vi.end()라는 문구가 나온다. vi.begin()은 컨테이너의 가장 첫번째 요소를 가리키는 것이고, vi.end()는 컨테이너의 마지막 요소의 다음 요소를 가 리키는 것이다. 즉 vi.begin()에서 시작하여 반복자 it를 vi.end()가 될 때까지 반복문을 돌리면 컨테이너의 모든 요소를 내부 구현 방식에 상관없이 일관성 있게 순회할 수 있는 것이다. 결과
  • 30. 반복자 Iterators 이제 반복자의 개념도 대충 알았으니 vector보다 조금 더 복잡한 list 컨테이너에 대해 알아보자
  • 31. 반복자 Iterators list list는 이중 링크드 리스트로 구현된 컨테이너다. 흔히 알려진 것처럼 삽 입, 삭제는 굉장히 빠르지만 요소를 순회하는 것은 느린 자료구조이다. list<Type> Name; 의 형태로 Type 형태의 list(이중 링크드 리스트) Name을 선언할 수 있다.
  • 33. 반복자 Iterators 활용 예시 push_back()함수를 통해 list의 맨 마지막에 요소를 삽입할 수 있다. 이중 연결리스트이므로 O(1) 시간 만에 삽입 연산이 수행된다.
  • 34. 반복자 Iterators 활용 예시 push_back()함수를 통해 list의 맨 마지막에 요소를 삽입할 수 있다. 이중 연결리스트이므로 O(1) 시간 만에 삽입 연산이 수행된다. list<Type>::iterator를 통해 vector와 완전히 동일한 방식으 로 내부 요소를 모두 순회하고 있다. 이렇게 서로 다른 내부 구 조를 지닌 컨테이너라 할 지라도 동일하게 일반화된 방법으로 순회할 수 있다는 것이 STL의 강점이다.
  • 35. 반복자 Iterators 활용 예시 push_back()함수를 통해 list의 맨 마지막에 요소를 삽입할 수 있다. 이중 연결리스트이므로 O(1) 시간 만에 삽입 연산이 수행된다. list<Type>::iterator를 통해 vector와 완전히 동일한 방식으 로 내부 요소를 모두 순회하고 있다. 이렇게 서로 다른 내부 구 조를 지닌 컨테이너라 할 지라도 동일하게 일반화된 방법으로 순회할 수 있다는 것이 STL의 강점이다.
  • 36. 반복자 Iterators map map은 연관이 있는 두 개의 값을 키(key)와 값(value)의 쌍으로 관리 하는 컨테이너다. map은 저장되는 데이터가 항상 정렬이 되어 있다는 특징을 갖고 있다. 따라서 많은 크기의 데이터를 저장하고, 검색을 빨리 해야하는 경우 map을 굉장히 유용하게 사용할 수 있다.
  • 37. 반복자 Iterators 그런데 이 때 map에서 key와 value가 의미하는 것이 각각 뭘까?
  • 38. 반복자 Iterators key는 정렬과 참조를 위한 정보 value는 실제로 저장하고 싶은 자료 라고 생각하면 편하다. 그런데 이 때 map에서 key와 value가 의미하는 것이 각각 뭘까?
  • 39. 반복자 Iterators key는 정렬과 참조를 위한 정보 value는 실제로 저장하고 싶은 자료 라고 생각하면 편하다. 예를 들어 NHN NEXT 학생들의 정보를 저장한다고 하면, key는 학생들의 학번 value는 각 학생과 관련된 정보 가 될 것이다. 그런데 이 때 map에서 key와 value가 의미하는 것이 각각 뭘까?
  • 40. 반복자 Iterators 그런데 잠깐, 지금까지는 하나의 값만 다루는 컨테이너를 썼는데 map은 두 개의 값을 같이 다룬다. 어떻게 두 개의 값을 같이 다룰 수 있지?
  • 41. 반복자 Iterators 그런데 잠깐, 지금까지는 하나의 값만 다루는 컨테이너를 썼는데 map은 두 개의 값을 같이 다룬다. 어떻게 두 개의 값을 같이 다룰 수 있지? STL에서는 이를 위해 pair라는 자료형을 제공한다.
  • 42. 반복자 Iterators pair pair는 두 개의 값을 하나로 묶어 관리할 수 있게 해준다. pair<Type1, Type2> Name; 의 형태로 Type1 형태의 자료와 Type2 형태의 자료를 하나로 묶은 쌍 Name을 선언할 수 있다.
  • 44. 반복자 Iterators 활용 예시 int 타입과 string 타입 두 개를 묶은 한 쌍을 나타내는 pair인 student의 선언
  • 45. 반복자 Iterators 활용 예시 int 타입과 string 타입 두 개를 묶은 한 쌍을 나타내는 pair인 student의 선언 pair자료형에서 first와 second는 각각 pair의 첫 번째 요소와 두 번째 요소를 가 리킨다.
  • 46. 반복자 Iterators 활용 예시 int 타입과 string 타입 두 개를 묶은 한 쌍을 나타내는 pair인 student의 선언 pair자료형에서 first와 second는 각각 pair의 첫 번째 요소와 두 번째 요소를 가 리킨다. 실행 결과는 간단하므로 생략
  • 47. 반복자 Iterators ◆map은 pair를 이용해 한 쌍으로 묶은 정보( < key, value >의 형태 ) 를 이용해 데이터를 저장한다. ◆map은 내부적으로 균형잡힌 이진 트리(balanced binary tree)로 구현되어 있다(정확히는 레드-블랙 트리 Red-Black tree). 이 때 key는 이진 트리를 정렬하고 이진 트리의 각 요소에 접근하기 위한 값으로 쓰이며, value는 실제로 저장된 값으로 쓰인다. 따라서 당연히 map에서 key는 절대 중복되어서는 안 된다. ◆균형잡힌 이진 트리는 검색 속도가 O(log n)임이 보장되기 때문에 map이 굉장히 빠른 검색 속도를 가지는 것이다. Map은 이런 것이다!
  • 49. 반복자 Iterators 활용 예시 각 도시의 이름을 key로, 인구수를 value로 하는 map m을 선언했다.
  • 50. 반복자 Iterators 활용 예시 각 도시의 이름을 key로, 인구수를 value로 하는 map m을 선언했다. insert 함수를 통해 한 쌍의 데이터 (pair)를 map에 저장할 수 있다. map은 내부적으로 자료를 정렬하여 관리하므로 이 자료가 어느 위치에 저 장될지는 알 수 없다.
  • 51. 반복자 Iterators 활용 예시 각 도시의 이름을 key로, 인구수를 value로 하는 map m을 선언했다. insert 함수를 통해 한 쌍의 데이터 (pair)를 map에 저장할 수 있다. map은 내부적으로 자료를 정렬하여 관리하므로 이 자료가 어느 위치에 저 장될지는 알 수 없다. 왼쪽과 같이 익숙한 배열의 형태로도 데이터를 삽 입할 수 있다. map[key] = value; 의 형태로 쓰 면 map에 key,value 쌍의 데이터가 삽입되고, map[key]라고 쓰면 해당 map에서 key에 해당 하는(key와 한 쌍인) value 값을 얻을 수 있다.
  • 52. 반복자 Iterators 활용 예시 각 도시의 이름을 key로, 인구수를 value로 하는 map m을 선언했다. insert 함수를 통해 한 쌍의 데이터 (pair)를 map에 저장할 수 있다. map은 내부적으로 자료를 정렬하여 관리하므로 이 자료가 어느 위치에 저 장될지는 알 수 없다. 왼쪽과 같이 익숙한 배열의 형태로도 데이터를 삽 입할 수 있다. map[key] = value; 의 형태로 쓰 면 map에 key,value 쌍의 데이터가 삽입되고, map[key]라고 쓰면 해당 map에서 key에 해당 하는(key와 한 쌍인) value 값을 얻을 수 있다. 지울 때는 erase 함수를 쓰며, 반복자 또는 특정 key 값을 통해 해당 key에 해당하는 value 한 쌍을 삭제 할 수 있다. value 값으로는 삭제할 수 없다. map의 삽입, 삭제 및 참조의 모든 기준은 key이다.
  • 53. 반복자 Iterators 활용 예시 각 도시의 이름을 key로, 인구수를 value로 하는 map m을 선언했다. insert 함수를 통해 한 쌍의 데이터 (pair)를 map에 저장할 수 있다. map은 내부적으로 자료를 정렬하여 관리하므로 이 자료가 어느 위치에 저 장될지는 알 수 없다. 왼쪽과 같이 익숙한 배열의 형태로도 데이터를 삽 입할 수 있다. map[key] = value; 의 형태로 쓰 면 map에 key,value 쌍의 데이터가 삽입되고, map[key]라고 쓰면 해당 map에서 key에 해당 하는(key와 한 쌍인) value 값을 얻을 수 있다. 지울 때는 erase 함수를 쓰며, 반복자 또는 특정 key 값을 통해 해당 key에 해당하는 value 한 쌍을 삭제 할 수 있다. value 값으로는 삭제할 수 없다. map의 삽입, 삭제 및 참조의 모든 기준은 key이다. 다른 컨테이너와 거의 완전히 똑같은 방식으 로 반복자를 이용해 컨 테이너 내부의 모든 요 소를 순회할 수 있다.
  • 54. 반복자 Iterators 활용 예시 각 도시의 이름을 key로, 인구수를 value로 하는 map m을 선언했다. insert 함수를 통해 한 쌍의 데이터 (pair)를 map에 저장할 수 있다. map은 내부적으로 자료를 정렬하여 관리하므로 이 자료가 어느 위치에 저 장될지는 알 수 없다. 왼쪽과 같이 익숙한 배열의 형태로도 데이터를 삽 입할 수 있다. map[key] = value; 의 형태로 쓰 면 map에 key,value 쌍의 데이터가 삽입되고, map[key]라고 쓰면 해당 map에서 key에 해당 하는(key와 한 쌍인) value 값을 얻을 수 있다. 지울 때는 erase 함수를 쓰며, 반복자 또는 특정 key 값을 통해 해당 key에 해당하는 value 한 쌍을 삭제 할 수 있다. value 값으로는 삭제할 수 없다. map의 삽입, 삭제 및 참조의 모든 기준은 key이다. 다른 컨테이너와 거의 완전히 똑같은 방식으 로 반복자를 이용해 컨 테이너 내부의 모든 요 소를 순회할 수 있다. 왜 이런 결과가 나올까?
  • 55. 반복자 Iterators 활용 예시 각 도시의 이름을 key로, 인구수를 value로 하는 map m을 선언했다. insert 함수를 통해 한 쌍의 데이터 (pair)를 map에 저장할 수 있다. map은 내부적으로 자료를 정렬하여 관리하므로 이 자료가 어느 위치에 저 장될지는 알 수 없다. 왼쪽과 같이 익숙한 배열의 형태로도 데이터를 삽 입할 수 있다. map[key] = value; 의 형태로 쓰 면 map에 key,value 쌍의 데이터가 삽입되고, map[key]라고 쓰면 해당 map에서 key에 해당 하는(key와 한 쌍인) value 값을 얻을 수 있다. 지울 때는 erase 함수를 쓰며, 반복자 또는 특정 key 값을 통해 해당 key에 해당하는 value 한 쌍을 삭제 할 수 있다. value 값으로는 삭제할 수 없다. map의 삽입, 삭제 및 참조의 모든 기준은 key이다. 다른 컨테이너와 거의 완전히 똑같은 방식으 로 반복자를 이용해 컨 테이너 내부의 모든 요 소를 순회할 수 있다. 왜 이런 결과가 나올까? 내부 자료들을 정렬해서 저장한다는 map의 특성을 염두에 두고 코드를 분 석해보자
  • 57. 알고리즘 까지 다루려니 분량이 너무 많아져서 생략. 알고리즘은 다음 기회에...
  • 58. 컨테이너와 반복자의 기본적인 개념 및 활용 방법을 알아보았다. 그러나 여기서 다룬 내용은 굉장히 기초적인 부분들이므로 더 자세하고 깊이 있는 내용은 뒤의 참고자료를 통해 알아보도록 하자. 마무리
  • 59. 참고 자료 normative Reference ◆ soen.kr C++ STL 문법 관련 자료. ◆ http://goo.gl/nX1WS9 한빛 미디어의 STL e-book(무료). 그리고 기타 시중에 많이 나와 있는 좋은 STL 도서들...