[C++] 주요 STL 컨테이너 레이블

13617 단어 C++tech

1. 개요

vector,list,map,multiset 등 많은 STL 용기가 존재하지만 데이터의 추가/삭제/참조 등은 같은 이름의 방법으로 잊어버리거나 틀릴 때가 있다.따라서 본고는 주요 컨테이너의 주요 조작을 총결하였다.오류, 누락, 추가 요구 등이 있으면 댓글로 남겨주세요.
기본적으로 데이터의 추출(pop, pop back 등) 값은 되돌아오지 않으니 잊지 마십시오.

2. 동적 정렬


조작하다
vector
추가(위치 지정)
insert(v.begin(), 값)
추가(시작)
-
추가(끝)
push_백(값)
인용하다
v[인덱스]
참조(시작)
front()
참조(끝)
back()
체크 아웃(시작)
-
제거(끝)
pop_back()
삭제(모든 요소)
clear()
삭제(지정된 값이 있는 모든 요소)
-
삭제(인덱스 지정)
erase(v.begin() + 인덱스)
삭제(지정된 이퀄라이저)
erase(itr)
요소 수가 0인지 확인(비어 있음)
empty()
획득 원소수
size()
크기 조정
치수

vector형 데이터 간의 비교


for문을 사용하지 않아도 다음과 같은if문으로 간단하게 쓸 수 있다.
if (v1 == v2) {
   ...
}

헤더 파일


#include <vector>

3. 정렬 집합(set) / 다중 집합(multiset)

set는 균형 이분 탐색 트리(self-balaning binary search tree)라고 불리는 데이터 구조로 이루어지며O(long N)를 통해 데이터에 접근하고 추가하며 삭제할 수 있다.또 중복된 데이터는 버려져 독특한 데이터만 집합된다.또한 데이터는 자동 승차순 정렬로 저장되며 최소치begin()와 최대치rbegin()O(1)를 통해 얻을 수 있다.
비슷한 데이터 구조multiset가 있다.multisetset과의 차이는 데이터가 중복될 수 있다는 데 있다.사용이 편리하면 어느 것이나 마찬가지다.중복 사용 허용 시multiset, 중복 데이터 삭제 시set.
또한 균형기로 데이터를 업데이트할 수 없기 때문에 업데이트를 하려면 한 번 삭제하고 삽입 작업을 해야 한다.
조작하다
set/multiset
덧붙이다
insert(값)
참조(최소)
begin()
참조(최대)
rbegin()
검색(값):이퀄라이저
find(값)
검색(값):존재하는 개수

삭제(모든 요소)
clear()
삭제(값 지정)
erase(값)
삭제(지정된 이퀄라이저)
erase(itr)
요소 수가 0인지 확인(비어 있음)
empty()
획득 원소수
size()

요소 확인


로케이터를 한 번 늘린 다음 순서대로 검색할 수 있습니다.
for (auto itr = st.begin(); itr != st.end(); itr++)
  cout << *itr << endl;

초기화


vector형 데이터 등을 set/multiset형 변수 (초기화) 에 대입할 때 for문장을 사용하지 않고 간단하게 쓸 수 있습니다.
set<int> st(v.begin(), v.end());

lower_bound 사용 가능

setmultiset는 모두 lower_bound를 제공하기 때문에 가장 작은 균형기를 찾을 수 있으며 그 값은 2진법 검색에서 매개 변수로 지정한 값 이상이다.
auto itr = st.lower_bound(x);
auto itr = ms.lower_bound(x);

헤더 파일


#include <set> // set, multiset

4. 쌓기


내부 사용vector 구축 더미.기본적으로 값이 큰 것은 대기열의 시작에 나타납니다.priority_queuepop를 이용하여 첫 번째 노드를 꺼낼 수 있지만 값을 지정하여 특정한 노드를 삭제할 수 없다.따라서 값을 삭제하려면 multiset로 대체합니다.또한 노드의 값도 변경할 수 없다.
조작하다
priority_queue
덧붙이다
push (값)
참조(최대)
top()
체크 아웃(시작)
pop()
요소 수가 0인지 확인(비어 있음)
empty()
획득 원소수
size()

희망치가 작은 것이 나무 꼭대기 (시작) 에 있을 때


변수 선언 시std::greater<int>는 정렬을 오름차순으로 설정할 수 있습니다(부절점 값은 하위 노드 값보다 작아야 합니다).
std::priority_queue<int, std::vector<int>, std::greater<int>> pq;

헤더 파일


#include <queue> // priority_queue

5. 균형 이분목(map)

set와 마찬가지로 균형 이분목으로 이루어지고 사전과 대응하는 키와 데이터를 조합하여 보존한다.또한 균형 이분목의 원인으로 인해 버튼의 승차순은 보존되기 때문에 키를 중복할 수 없다.
산목록처럼 사용할 수 있지만 실제로는 균형이분목으로 이루어져 있기 때문에O(1)로 데이터 접근을 하는 것이 아니라 필요O(log N)입니다.사전으로 사용할 때는 후술unordered_map을 사용하는 것이 좋다.
조작하다
map
덧붙이다
mp[키]= 값
참조(키)
mp[키]
참조(최소)
begin()
참조(최대)
rbegin()
검색(값):이퀄라이저
find(값)
검색(값):존재하는 개수
count(값) ※ 실질적으로 1 또는 0만 반환
검색(값 이상의 최소값 노드 지정):이퀄라이저
lower_bound
검색(지정된 값보다 큰 최소값 노드):이퀄라이저
upper_bound
삭제(모든 요소)
clear()
삭제(지정된 키가 있는 노드)
erase (키)
삭제(지정된 이퀄라이저)
erase(itr)
요소 수가 0인지 확인(비어 있음)
empty()
획득 원소수
size()
크기 조정
-

헤더 파일


#include <map>

6.스택


조작하다
stack
추가(위치 지정)
-
추가(시작)
-
추가(끝)
push (값)
참조(시작)
-
참조(끝)
top()
체크 아웃(시작)
-
제거(끝)
pop()
삭제(모든 요소)
-
삭제(지정된 값이 있는 모든 요소)
-
삭제(인덱스 지정)
-
삭제(지정된 이퀄라이저)
-
요소 수가 0인지 확인(비어 있음)
empty()
획득 원소수
size()
크기 조정
-

헤더 파일


#include <stack>

7. 대기열/양쪽 대기열/양방향 목록

deque와 일반queue의 차이점은 deque도 처음에 데이터O(1)를 추가할 수 있고 임의의 데이터를 삭제할 수 있다는 것이다.또한 deque도 바이너리 검색을 할 수 있고 단조롭게 증가한 줄 서기 데이터에 대해 바이너리 검색을 할 때도 유효하다.
조작하다
queue
deque
list
추가(위치 지정)
-
-
insert(it, 값)
추가(시작)
-
push_front(값)
push_front(값)
추가(끝)
push (값)
push_백(값)
push_백(값)
참조(시작)
front()
front()
front()
참조(끝)
back()
back()
back()
체크 아웃(시작)
pop()
pop_front()
pop_front()
제거(끝)
-
pop_back()
pop_back()
삭제(모든 요소)
-
clear()
clear()
삭제(지정된 값이 있는 모든 요소)
-
-
remove(값)
삭제(인덱스 지정)
-
erase(itr+인덱스)
erase(itr+인덱스)
삭제(지정된 이퀄라이저)
-
erase(itr)
erase(itr)
요소 수가 0인지 확인(비어 있음)
empty()
empty()
-
획득 원소수
size()
size()
size()
크기 조정
-
치수
치수
목록 유형의 데이터를 삭제할 때 주의해야 할 것은 함께 참조하십시오[C++] 양방향 목록 (list)에서 요소 검색 및 삭제 작업 시 주의사항.

헤더 파일


#include <queue> // queue
#include <deque> // deque
#include <list> // list

8. 해시(연상 배열)

setmap와 같은 기능을 가지고 내부 데이터 구조는 하시unordered_setunordered_map가 되었다.O(1)에서 데이터의 참조 추가 등을 진행할 때 이 방법을 사용한다.
조작하다
unordered_map
unordered_set
덧붙이다
mp[키]= 값
insert(값)
참조(키)
mp[키]
<-
검색(값):이퀄라이저
find(값)
<-
검색(값):존재하는 개수

<-
삭제(모든 요소)
clear()
<-
삭제(지정된 키가 있는 노드)
erase (키)
<-
삭제(지정된 이퀄라이저)
erase(itr)
<-
요소 수가 0인지 확인(비어 있음)
empty()
<-
획득 원소수
size()
<-

헤더 파일


#include <unordered_map> // unordered_map
#include <unordered_set> // unordered_set

9. bitset


사용bitset 처리 비트 데이터 배열 등.각 요소는 0 또는 1만 취한다.
std::bitset<8> bset(0xff);
bset.set(1)
bset.set(2, false)
bset[0] = true;
조작하다
stack
지정된 비트 뒤집기
flip(대상 비트)
모든 비트 반전
flip()
숫자는 1이다
count()
비트 설정
set (객체 비트)
비트 지우기
set(대상 비트, 가짜)

헤더 파일


#include <bitset>

10. 참고 문헌

  • 【C++】priority_queue처럼 최대치를 얻는 동시에 임의의 요소도 삭제하고 싶다!!
  • PlacePlus C++편[표준고] 제13장
  • 좋은 웹페이지 즐겨찾기