코딩하기 좋은날
C++ STL컨테이너 구조 - list,multimap 본문
저는 평범한 대학생입니다. 잘못된 부분이 있다면 알려주시면 확인 후 바로 수정하겠습니다.
오늘은 C++의 STL 컨테이너 구조중 list와 multimap 에 대해서 알아 보겠습니다.
- 1.list
-list 컨테이너는 Double linked list인 이중 연결 리스트로 구현 되어 있습니다.
-<list> 헤더파일을 추가하면 사용이 가능합니다.
- 기본적인 연산들은 vector와 비슷하지만 list 구조는 양방향으로 삽입 삭제가 가능합니다.
- list는 각각이 포인터로 연결되어 있어 at이나,[] 사용이 불가능하고 iterator를 통한 방식으로만 접근이 가능합니다.
- list는 기본적으로 array와 달리 삽입과 삭제에 있어서 굉장히 효율적입니다. 따라서 그러한 작업이 많이 존재 할 때 사용하시면 좋습니다.
-연산
|
n개의 element를 할당합니다. |
|
각각 가장 앞과 맨 뒤의 원소를 반환합니다. |
|
각각 가장 앞과 맨 뒤의 iterator를 반환합니다. |
|
각각 맨 끝과 맨 앞에 element를 삽입합니다. |
|
각각 맨 끝과 맨 앞에 있는 원소를 제거합니다. |
|
iter가 가리키는 위치에 원소를 삽입하고 이 원소를 가리키는 iterator를 반환합니다 |
|
iter가 가리키는 위치의 원소를 제거하고 제거한 원소의 다음 원소를 가리키는 iterator를 반환합니다. |
|
list의 크기를 반환합니다. |
|
remove는 원소가 element인 것을 모두 제거합니다. remove_if는 조건에 해당되는 모든 원소를 제거합니다. |
추가적인 연산은 아래의 사이트를 참고해 주세요.
http://www.cplusplus.com/reference/list/list/?kw=list
다음은 테스트 코드입니다.
#include <iostream>
#include <list>
using namespace std;
int main(void) {
list<int> l;
l.assign(3,4);
l.push_back(5);
l.push_front(6); // 6 4 4 4 5 순서로 삽입
cout<<l.front()<<endl; //6 출력
cout<<l.back()<<endl; // 5 출력
l.pop_back(); // 5 제거
l.pop_front(); // 6 제거
// 리스트 : 4 4 4
cout<<l.front()<<endl; //4출력
cout<<l.back()<<endl; //4출력
auto it = l.begin();
++it; //두번째 위치
it = l.insert(it, 8); //두번째 위치에 8 삽입
//리스트 : 4 8 4 4
for(auto n: l)
cout<<n<<" ";
cout<<endl;
it = l.erase(it); //두번째 위치 값 제거
//리스트 : 4 4 4
for(auto n: l)
cout<<n<<" ";
cout<<endl;
cout<<l.size()<<endl; //사이즈 3
l.push_back(1); //1 삽입
//리스트: 4 4 4 1
l.remove(4); //4 모두 제거
//리스트: 1
for(auto n: l)
cout<<n<<" ";
return 0;
}
- 2.multimap
|
key 값에 해당하는 첫번째 원소의 iterator를 반환합니다. |
|
key 값에 해당하는 마지막 원소의 다음 원소의 iterator를 반환합니다. |
|
key 값에 해당하는 원소들의 범위를 pair 객체로 반환합니다. pair 객체의 first에는 첫번째로 나타나는 원소의 iterator가 second에는 마지막으로 나타나는 원소의 다음 원소의 iterator가 저장 되어 있습니다. 즉 pair객체에는 lower_bound와 upper_bound가 저장 되어있습니다. |
#include <iostream>
#include <map>
using namespace std;
int main(void) {
multimap<int, int> mm;
mm.insert(make_pair(1,2));
mm.insert(make_pair(1,3));
mm.insert(make_pair(2,4));
mm.insert(make_pair(3,5));
mm.insert(make_pair(3,6));
mm.insert(make_pair(3,7));
mm.insert(make_pair(4,8));
//lower_bound 는 3,5의 iterator를 upper_bound 는 3,7의 다음인 4,8의 iterator를 반환합니다.
for(auto it = mm.lower_bound(3); it != mm.upper_bound(3); it++) //key 값이 3인 원소 출력
cout<<'['<<it->first<<','<<it->second<<']'<<endl;
for(auto it = mm.equal_range(3).first; it != mm.equal_range(3).second; it++) //key 값이 3인 원소 출력
cout<<'['<<it->first<<','<<it->second<<']'<<endl;
return 0;
}
'C++' 카테고리의 다른 글
C++ Pair 클래스 (0) | 2019.01.13 |
---|---|
C++ STL 기본 컨테이너 구조(스택,큐,사전,우선순위 큐,집합,벡터) -2 (0) | 2019.01.12 |
C++ STL 기본 컨테이너 구조(스택,큐,사전,우선순위 큐,집합) -1 (0) | 2019.01.12 |