[C++] 주요 STL 컨테이너 레이블
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
가 있다.multiset
중set
과의 차이는 데이터가 중복될 수 있다는 데 있다.사용이 편리하면 어느 것이나 마찬가지다.중복 사용 허용 시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 사용 가능
set
와 multiset
는 모두 lower_bound
를 제공하기 때문에 가장 작은 균형기를 찾을 수 있으며 그 값은 2진법 검색에서 매개 변수로 지정한 값 이상이다.auto itr = st.lower_bound(x);
auto itr = ms.lower_bound(x);
헤더 파일
#include <set> // set, multiset
4. 쌓기
내부 사용
vector
구축 더미.기본적으로 값이 큰 것은 대기열의 시작에 나타납니다.priority_queue
는 pop
를 이용하여 첫 번째 노드를 꺼낼 수 있지만 값을 지정하여 특정한 노드를 삭제할 수 없다.따라서 값을 삭제하려면 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. 해시(연상 배열)
set
는 map
와 같은 기능을 가지고 내부 데이터 구조는 하시unordered_set
와 unordered_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. 참고 문헌
Reference
이 문제에 관하여([C++] 주요 STL 컨테이너 레이블), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/kurun/articles/0abb3b0dfb856d텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)