ㅇ 연관 컨테이너
- 키와 값 처럼 관련 있는 데이터를 하나의 쌍으로 저장하는 컨테이너
- 맵은 키와 값의 쌍을 저장하며, 셋은 키만 저장하고 값은 저장하지 않는다.
- 데이터를 저장할 때 아무곳에나 저장하지 않고 검색을 고려하여 최대한 빠른 속도로 키를 찾을 수 있는 위치에 저장하므로 검색속도가 굉장히 빠르다.
- 구현하는 방법에는 이진트리, 해쉬테이블에 저장하는 방법이 있다.
- 해쉬 : 해쉬 함수에 의해 한번에 자료를 찾을 수 있으므로 검색속도가 거의 순식간이라는 장점, 성능을 높이기 위해서 해쉬 테이블이 충분히 커야 하므로 메모리 낭비가 좀 심한편
데이터의 분포 정도에 따라 검색 속도가 운에 좌우되는 경향, 최악의 상황에는 속도가 떨어진다.
- 이진트리 : 메모리 낭비가 심하지 않음, 데이터의 종류에 상관없이 항상 일정한 성능 보장, 해쉬보다 안정적, 표준 STL은 이진트리에 정렬하는 방식으로 구현된 연관 컨테이너 제공
- 연관 컨테이너는 삽입 위치를 지정할 수 없고 자동으로 삽입위치가 결정 된다.
- 삽입 속도는 시퀀스보다 느리지만 검색 속도는 월등히 빠르다. ==> 삽입할때 검색하기 편한 위치를 미리 선정
ㅇ 연관 컨테이너의 종류
- 저장 대상과 키의 중복 여부에 따라 4가지가 있다.
- 셋 , 맵, 멀티셋, 멀티맵
- 연관 컨테이너의 반복자는 모두 양방향 반복자이다.
ㅇ pair
- 키와 값의 쌍을 표현하기 위해 사용하는 구조체
- 둘 이상의 값을 묶어서 관리하거나 리턴할 일이 많기 때문에 pair 구조체를 종종 사용한다.
1 template<class T1, class T2>
2 struct pair
3 {
4 typedef T1 first_type;
5 typedef T2 second_type; 6 T1 first;
7 T2 second;
8 pair() : first(T1()), second(T2()) {}
9 pair(const T1& v1, const T2& v2) : first(v1), second(v2) {}
10 };
- 실제 선언 형태는 컴파일러에 따라 달라진다.
- 구조체는 값으로 복사, 대입되므로 함수의 리턴 타입으로 사용가능하다.
- 사용 예
1
2 #include <iostream>
3 #include <string>
4 #include <utility>
5
6 using namespace std;
7
8 typedef pair<string,double> sdpair;
9 sdpair GetPair()
10 {
11 sdpair temp; 12 temp.first="문자열";
13 temp.second=1.234;
14 return temp;
15 // return make_pair("문자열",1.234);
16 }
17
18 void main()
19 {
20 sdpair SD;
21 SD=GetPair();
22 cout << SD.first << "," << SD.second << endl;
23 }
24
- pair 구조체를 사용하려면 uitiliy 헤더 파일을 포함해야 하는데 STL의 다른 헤더 파일을 include 하면 자동으로 include가 된다.
ps : 출처 및 자세한 내용은 www.WinAPI.co.kr 참고
'[ C/ C++ 프로그래밍 ] > [ STL ]' 카테고리의 다른 글
[ 혼연 정리 ] 연관 컨테이너 - 6 [ 맵 ] (0) | 2010.06.24 |
---|---|
[ 혼연 정리 ] 연관 컨테이너 - 2 [ 셋 ] (0) | 2010.06.24 |
[ 혼연 정리 ] 시퀀스 컨테이너 - 9 [ 리스트 ] (0) | 2010.06.24 |
[ 혼연 정리 ] 시퀀스 컨테이너 - 8 [ 리스트 ] (2) | 2010.06.24 |
[ 혼연 정리 ] 시퀀스 컨테이너- 7 [ 리스트 ] (0) | 2010.06.24 |