STL - map / set

rizzΒ·2024λ…„ 1μ›” 25일
0

STL

λͺ©λ‘ 보기
4/6

πŸ“’ map / set

πŸ“Œ mapμ΄λž€?

  • 각 μš”μ†Œλ₯Ό const key, value둜 이루어져 데이터λ₯Ό μ €μž₯ν•˜λŠ” μ—°κ΄€ μ»¨ν…Œμ΄λ„ˆμ΄λ‹€.
  • 킀값은 κ³ μœ ν•˜λ©° 데이터λ₯Ό μžλ™μœΌλ‘œ μ •λ ¬ν•˜λŠ” 데 μ‚¬μš©λœλ‹€.
  • map에 μžˆλŠ” μš”μ†Œμ˜ 값은 직접 λ³€κ²½ν•  수 μžˆλ‹€. 킀값은 μƒμˆ˜μ΄λ©° λ³€κ²½ν•  수 μ—†λ‹€.
  • map은 C++μ—μ„œ κ· ν˜• 이진 트리(Red-Black Tree)둜 κ΅¬ν˜„λ˜μ–΄ μžˆλ‹€.
  • Red-Black Tree의 μžμ„Έν•œ μ„€λͺ… : https://velog.io/@liz/%EC%9E%90%EB%A3%8C%EA%B5%AC%EC%A1%B0-red-black-tree

πŸ“Œ map의 νŠΉμ§•

  • 킀값을 기반으둜 μš”μ†Ÿκ°’μ„ 효율적으둜 검색할 수 μžˆλ‹€.
  • μš”μ†Œκ°€ μ§€μ •λœ ν•¨μˆ˜μ— 따라 킀값을 κΈ°μ€€μœΌλ‘œ μžλ™μœΌλ‘œ μ •λ ¬λ˜μ–΄ μžˆλ‹€.
  • μ–‘λ°©ν–₯ 반볡자(iterator)λ₯Ό μ œκ³΅ν•œλ‹€.
  • μ—°κ΄€ μ»¨ν…Œμ΄λ„ˆμΈ 만큼 탐색과 μ‚½μž… 및 μ œκ±°μ— μ΅œμ ν™”λ˜μ–΄ μžˆλ‹€.
  • κ·ΈλŸ¬λ‚˜ 데이터λ₯Ό μ •λ ¬ν•˜μ—¬ μ €μž₯ν•˜κΈ° λ•Œλ¬Έμ— μ΅œμ•…μ˜ 경우 O(log n)의 μ‹œκ°„μ΄ κ±Έλ¦°λ‹€.
  • 킀와 값을 μ—°κ²°ν•˜λŠ” 쑰건일 경우 map을 μ„ νƒν•˜λŠ” 것이 μ’‹λ‹€.
  • ν‚€κ°€ κ³ μœ ν•˜μ§€ μ•Šμ€ κ²½μš°μ—λŠ” multimap이 μ ν•©ν•˜λ‹€.
  • ν‚€κ°’λ§Œ μ €μž₯ν•˜λ €λŠ” κ²½μš°μ—λŠ” set이 μ ν•©ν•˜λ‹€.
  • 킀값이 μ€‘λ³΅λ˜λŠ” κ²½μš°μ—λŠ” multiset이 μ ν•©ν•˜λ‹€.

πŸ“Œ μ •λ ¬

  • 맡은 key_compare의 μ €μž₯된 ν•¨μˆ˜ 개체λ₯Ό ν˜ΈμΆœν•˜μ—¬ μš”μ†Œλ₯Ό μ •λ ¬ν•œλ‹€.
  • 이 μ €μž₯된 κ°œμ²΄λŠ” key_comp λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•˜μ—¬ λΉ„κ΅ν•œλ‹€.
  • Red-Black Treeλ₯Ό 기반으둜 μ •λ ¬λœ 이진 탐색 트리 ν˜•νƒœμ΄λ‹€.

πŸ“Œ map의 멀버 ν•¨μˆ˜μ™€ μ—°μ‚°μžλŠ” μ•„λž˜ 링크

πŸ“Œ setμ΄λž€?

  • 데이터λ₯Ό μ €μž₯ν•˜κ³  κ²€μƒ‰λ˜λŠ” 데 μ‚¬μš©λœλ‹€.
  • set의 κ°’(key)은 κ³ μœ ν•˜λ©° 데이터가 μžλ™μœΌλ‘œ μ •λ ¬λ˜λŠ” μ—°κ΄€ μ»¨ν…Œμ΄λ„ˆ 이닀.
  • set의 값은 λ³€κ²½ν•  수 μ—†λ‹€. 이전 값을 μ‚­μ œν•˜κ³  μƒˆ κ°’μ˜ μš”μ†Œλ₯Ό μ‚½μž…ν•΄μ•Ό ν•œλ‹€.
  • mapκ³Ό λ§ˆμ°¬κ°€μ§€λ‘œ κ· ν˜• 이진 트리(Red-Black Tree)둜 κ΅¬ν˜„λ˜μ–΄ μžˆλ‹€.
  • Red-Black Tree의 μžμ„Έν•œ μ„€λͺ… : https://velog.io/@liz/%EC%9E%90%EB%A3%8C%EA%B5%AC%EC%A1%B0-red-black-tree

πŸ“Œ set νŠΉμ§•

  • 킀값을 κΈ°μ€€μœΌλ‘œ ν•˜μ—¬ κ°’μ˜ 효율적인 탐색을 μ§€μ›ν•˜λŠ” κ°€λ³€ 크기의 μ—°κ΄€ μ»¨ν…Œμ΄λ„ˆμ΄λ‹€.
  • μ–‘λ°©ν–₯ 반볡자(iterator)λ₯Ό μ œκ³΅ν•œλ‹€.
  • μ—°κ΄€ μ»¨ν…Œμ΄λ„ˆμΈ 만큼 μ‘°νšŒμ™€ μ‚½μž… 및 제거 μž‘μ—…μ— μ΅œμ ν™”λ˜μ–΄ μžˆλ‹€.
  • ν‚€μ˜ 쀑볡이 ν—ˆμš©λœ κ²½μš°μ—λŠ” multiset이 μ ν•©ν•˜λ‹€.
  • 킀와 값이 μ—°κ²°λœ κ²½μš°μ—λŠ” map이 μ ν•©ν•˜λ‹€.
  • 킀와 값이 μ—°κ²°λ˜μ–΄ 있고, ν‚€κ°€ κ³ μœ ν•˜μ§€ μ•ŠμœΌλ©΄ multimap이 μ ν•©ν•˜λ‹€.

πŸ“Œ μ •λ ¬

  • mapκ³Ό λ™μΌν•˜κ²Œ key_compare의 μ €μž₯된 ν•¨μˆ˜ 개체λ₯Ό ν˜ΈμΆœν•˜μ—¬ μš”μ†Œλ₯Ό μ •λ ¬ν•œλ‹€.
  • 이 μ €μž₯된 κ°œμ²΄λŠ” mapκ³Ό λ™μΌν•˜κ²Œ key_comp λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•˜μ—¬ λΉ„κ΅ν•œλ‹€.
  • mapκ³Ό λ™μΌν•˜κ²Œ Red-Black Treeλ₯Ό 기반으둜 μ •λ ¬λœ 이진 탐색 트리 ν˜•νƒœμ΄λ‹€.

πŸ“Œ set의 멀버 ν•¨μˆ˜μ™€ μ—°μ‚°μžλŠ” μ•„λž˜ 링크

πŸ“Œ mapκ³Ό set의 비ꡐ

차이점

  • map은 const key, valueλ₯Ό μ›μ†Œλ‘œ μ €μž₯ν•˜κ³  keyλ₯Ό κΈ°μ€€μœΌλ‘œ 데이터λ₯Ό μ •λ ¬ν•œλ‹€.
  • set은 key κ°’λ§Œ μ €μž₯ν•˜κ³  μ •λ ¬ν•œλ‹€.

같은 점

profile
λ³΅μŠ΅ν•˜κΈ° μœ„ν•΄ μ“°λŠ” κΈ€

0개의 λŒ“κΈ€