스터디/CS 스터디 (24.06-24.11)

자료구조 : set과 map

minseokiim 2024. 9. 11. 19:43

1. set

: 중복되지 않는 고유한 값을 저장하는 자료구조

 

// js : 중복을 허용하지 않으며, 삽입 순서대로 데이터를 유지

let set = new Set([1, 2, 3]);

set.add(4);

 

//python : 중괄호 {}로 생성하며, 중복을 허용하지 않음

s = {1, 2, 3} s.add(4)

 

//c++ : 정렬된 순서로 저장되며 중복을 허용하지 않음

#include <iostream>

#include <set>

std::set<int> s = {1, 2, 3}; s.insert(4);

 

// java : HashSet, LinkedHashSet, TreeSet을 통해 다양한 특성을 가진 Set을 제공

Set<Integer> set = new HashSet<>();

set.add(1);

 

 

2. map

키-값 쌍을 저장하는 자료구조로, 각 키는 고유하며 값은 중복될 수 있음

 

// js : 삽입 순서를 유지하며, 객체를 키로 사용할 수 있음.

let map = new Map();

map.set('key1', 'value1');

 

//python : dict 자료형을 사용하며, Python 3.7부터는 삽입 순서를 유지

m = {'key1': 'value1', 'key2': 'value2'}

print(m['key1'])

 

//c++ : std::map은 키가 자동으로 정렬되고, std::unordered_map은 해시 기반으로 순서를 보장하지 않음.

#include <iostream>

#include <map>

std::map<std::string, std::string> m;

m["key1"] = "value1";

 

 

// java : HashMap, TreeMap, LinkedHashMap 등 다양한 구현체가 있으며 각각의 성능 특성이 다름.

import java.util.HashMap;

Map<String, String> map = new HashMap<>();

map.put("key1", "value1");

 

 

3. Set과 Map을 같이 사용하는 경우

- Map에서 키-값 쌍을 저장하면서, 어떤 키가 이미 사용되고 있는지 추적하기 위해 Set을 사용 할 수 있음

- 특정 키에 여러 값을 저장해야 할 때, Map의 값으로 Set을 사용할 수 있음 → 키에 대한 값들이 중복되지 않도록

    -> 예시: 학생의 과목별 점수를 저장할 때, Map의 키로 학생 이름을, Set을 값으로 사용하여 중복 점수를 막을 수 있음

- Set은 중복을 허용하지 않으므로, 새로운 데이터를 Map에 추가하기 전에 중복을 빠르게 검사