내 학점 (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