내 학점 (C++)
[C++] vector, set, unordered_set
z_zen
2025. 9. 15. 23:18
728x90
1. vector
#include <bits/stdc++.h>
using namespace std;
int main() {
// 선언
vector<int> v; // 빈 벡터
vector<int> v2(5, 10); // 5개 원소, 전부 10으로 초기화
// 원소 추가
v.push_back(1);
v.push_back(2);
// 원소 접근
cout << v[0] << endl; // 인덱스 접근
cout << v.at(1) << endl; // 범위 체크 있는 접근
// 크기
cout << v.size() << endl;
// 반복문
for (int i = 0; i < v.size(); i++) cout << v[i] << " ";
for (int x : v) cout << x << " "; // range-based for
// 정렬
sort(v.begin(), v.end());
// 삭제
v.pop_back(); // 마지막 원소 삭제
v.erase(v.begin() + 1); // 인덱스 1 위치 삭제
// 비우기
v.clear();
return 0;
}
2. set
#include <bits/stdc++.h>
using namespace std;
int main() {
// 선언
vector<int> v; // 빈 벡터
vector<int> v2(5, 10); // 5개 원소, 전부 10으로 초기화
// 원소 추가
v.push_back(1);
v.push_back(2);
// 원소 접근
cout << v[0] << endl; // 인덱스 접근
cout << v.at(1) << endl; // 범위 체크 있는 접근
// 크기
cout << v.size() << endl;
// 반복문
for (int i = 0; i < v.size(); i++) cout << v[i] << " ";
for (int x : v) cout << x << " "; // range-based for
// 정렬
sort(v.begin(), v.end());
// 삭제
v.pop_back(); // 마지막 원소 삭제
v.erase(v.begin() + 1); // 인덱스 1 위치 삭제
// 비우기
v.clear();
return 0;
}
3. unordered_set
#include <bits/stdc++.h>
using namespace std;
int main() {
unordered_set<int> us;
// 삽입
us.insert(10);
us.insert(5);
// 탐색 (정렬X, 순서 없음)
if (us.find(5) != us.end()) {
cout << "5 있음\n";
}
// 삭제
us.erase(10);
// 순회 (순서 랜덤)
for (int x : us) cout << x << " ";
return 0;
}
vector vs set vs unordered_set
| 구분 | vector | set | unordered_set |
| 저장 방식 | 동적 배열 (연속 메모리) | 레드-블랙 트리 (이진 탐색 트리) | 해시 테이블 |
| 중복 허용 | O (허용) | X (자동 제거) | X (자동 제거) |
| 정렬 여부 | 입력 순서 유지 | 자동 오름차순 정렬 | 정렬 없음 (순서 랜덤) |
| 접근 속도 | 인덱스 O(1) | 탐색 O(log N) | 탐색 평균 O(1), 최악 O(N) |
| 삽입/삭제 속도 | 끝에서 O(1), 중간 O(N) | 삽입/삭제 O(log N) | 삽입/삭제 평균 O(1), 최악 O(N) |
| 메모리 사용량 | 상대적으로 적음 | 큼 (트리 구조) | 더 큼 (해시 구조) |
| 순회 속도 | 매우 빠름 (연속적) | 느림 | 보통 (순서 랜덤) |
| 적합한 상황 | 순차 접근, 인덱스 기반 연산 | 정렬된 집합 필요, 범위 탐색 | 빠른 탐색 필요, 순서 상관 없음 |
728x90