[C++] STL μ»¨ν…Œμ΄λ„ˆ(Containers)

2020. 5. 14. 18:40Β·πŸ“ Language/✏ C & C++

STL μ»¨ν…Œμ΄λ„ˆ μ’…λ₯˜

 

1. μˆœμ„œ(μ‹œν€€μŠ€) μ»¨ν…Œμ΄λ„ˆ

데이터λ₯Ό μ„ ν˜•μœΌλ‘œ μ €μž₯ν•˜λŠ” μ»¨ν…Œμ΄λ„ˆλ‘œ μ—°κ΄€ μ»¨ν…Œμ΄λ„ˆμ— λΉ„ν•΄ 검색 μ„±λŠ₯이 μ’‹μ§€ μ•Šλ‹€.

 

1) Vector

κ°€μž₯ 기본적인 μ»¨ν…Œμ΄λ„ˆμ΄λ‹€.

  • 일반 λ°°μ—΄μ²˜λŸΌ 연속적인 λ©”λͺ¨λ¦¬μ— μ €μž₯되고 ν™•μž₯/μΆ•μ†Œκ°€ κ°€λŠ₯ν•œ λ™μ  λ°°μ—΄λ‘œ κ΅¬ν˜„λ˜μ–΄ μžˆλ‹€.
  • iterator 뿐만 μ•„λ‹ˆλΌ indexλ‘œλ„ 접근이 κ°€λŠ₯ν•˜μ—¬ κ°œλ³„ μ›μ†Œμ— λŒ€ν•œ μ ‘κ·Ό 속도가 λΉ λ₯΄λ‹€.

 

2) Deque

  • vector와 λΉ„μŠ·ν•œ μ»¨ν…Œμ΄λ„ˆμ΄μ§€λ§Œ, ν•˜λ‚˜μ˜ λ©”λͺ¨λ¦¬ 블둝이 μ•„λ‹Œ μ—¬λŸ¬ λ©”λͺ¨λ¦¬ 블둝에 λ‚˜λ‰˜μ–΄ μ €μž₯λœλ‹€.
  • Random access iteratorλ₯Ό ν†΅ν•œ index둜 접근이 κ°€λŠ₯ν•˜λ‹€.

 

3) List

  • 비연속적인 λ©”λͺ¨λ¦¬μ— μ €μž₯λœλ‹€.
  • index둜 접근이 λΆˆκ°€λŠ₯ν•˜λ‹€. 접근을 ν•˜κΈ° μœ„ν•΄μ„œλŠ” μ„ ν˜• 탐색이 ν•„μš”ν•˜λ‹€.
  • 보톡 μ‚½μž…, μ‚­μ œν•˜λŠ” 연산이 λ§Žμ„ λ•Œ μ‚¬μš©ν•œλ‹€.

 

4) Array

  • vector와 λΉ„μŠ·ν•œ μ»¨ν…Œμ΄λ„ˆμ΄μ§€λ§Œ, 정적 배열이닀.

 

2. μ—°κ΄€ μ»¨ν…Œμ΄λ„ˆ

μš”μ†Œμ˜ μœ„μΉ˜κ°€ μžμ‹ μ˜ κ°’κ³Ό νŠΉμ • μ •λ ¬ 기쀀에 따라 μ •ν•΄μ§€λŠ” μ»¨ν…Œμ΄λ„ˆλ‘œ λΉ λ₯Έ 검색에 μš©μ΄ν•˜λ‹€.

 

1) Set

set<key, (orderclass)>의 ν˜•νƒœλ‘œ key 값을 κΈ°μ€€μœΌλ‘œ μ •λ ¬λœ μƒνƒœ μœ μ§€ν•œλ‹€.

  • key 값은 μ€‘λ³΅λœ 값을 ν—ˆμš©ν•˜μ§€ μ•ŠλŠ”λ‹€.
  • orderclass둜 μ •λ ¬ 기쀀을 μ •ν•  수 μžˆλ‹€. λ””ν΄νŠΈλŠ” μ˜€λ¦„μ°¨μˆœμ΄λ‹€.
class OrderClass {
public:
	bool operator()(pair<int, int> a, pair<int, int> b) {
		return a.second < b.second;
	}
};

int main()
{
	set<pair<int, int>, OrderClass> s;
}

 

2) Map

map<key, value>의 ν˜•νƒœλ‘œ key 값을 κΈ°μ€€μœΌλ‘œ μ •λ ¬ν•œλ‹€.

  • key 값은 μ€‘λ³΅λœ 값을 ν—ˆμš©ν•˜μ§€ μ•ŠλŠ”λ‹€.
  • m[key] = value;의 ν˜•νƒœλ‘œ μ›μ†Œλ₯Ό μΆ”κ°€ λ˜λŠ” μˆ˜μ •μ΄ κ°€λŠ₯ν•˜λ‹€.

 

3) Multiset/Multimap

μ€‘λ³΅λœ μ›μ†Œ(key)λ₯Ό ν—ˆμš©ν•œλ‹€.

 

3. λΉ„μ •λ ¬ μ»¨ν…Œμ΄λ„ˆ

μš”μ†Œμ˜ μœ„μΉ˜κ°€ μ€‘μš”ν•˜μ§€ μ•Šκ³  νŠΉμ • μ›μ†Œκ°€ 이 μ»¨ν…Œμ΄λ„ˆ μ•ˆμ— μžˆλŠ”μ§€κ°€ μ€‘μš”ν•˜λ‹€.

 

1) unordered_set

2) unordered_map

 

4. μ»¨ν…Œμ΄λ„ˆ μ–΄λŒ‘ν„°

1) stack

2) queue

 

5. 반볡자 (Iterator)

μ»¨ν…Œμ΄λ„ˆ 클래슀의 λͺ¨λ“  데이터λ₯Ό μ ‘κ·Όν•˜λŠ” μ—°μ‚°μžλ‘œ * μ—°μ‚°μžλ₯Ό 톡해 λ°˜λ³΅μžκ°€ κ°€λ¦¬ν‚€λŠ” 값을 κ°€μ Έμ˜¨λ‹€.

// κ°’ μ°ΎκΈ°
auto iter = find(v.begin(), v.end(), val);
if (iter == v.end())
	cout << "값이 μ‘΄μž¬ν•˜μ§€ μ•ŠμŒ";

// μ΅œμ†Ÿκ°’/μ΅œλŒ“κ°’ μ°ΎκΈ°
auto iter = min_element(v.begin(), v.end());
auto iter = max_element(v.begin(), v.end());

// μ§€μš°κΈ°
auto iter = remove_if(v.begin(), v.end(), [](int a) {
	return a % 3 == 0;
	});
v.erase(iter, v.end());

 

6. κ΅¬ν˜„

https://baactree.tistory.com/29

 

STL 정리

본인이 PSλ₯Ό ν•˜λ©΄μ„œ 자주 μ‚¬μš©ν•˜λŠ” STL듀을 μ •λ¦¬ν•˜κ² μŠ΅λ‹ˆλ‹€. 1. vector 동적배열이닀. μž„μ˜μ˜ μœ„μΉ˜μ— μžˆλŠ” μ›μ†Œ μ ‘κ·Όκ³Ό, λ’€μ—μ„œ μ›μ†Œλ₯Ό μΆ”κ°€ν•˜λŠ” 연산은 O(1)(λΆ„ν• μƒν™˜λΆ„μ„)을 보μž₯ν•œλ‹€. 2. stack μŠ€νƒ οΏ½

baactree.tistory.com

 

7. 기타

1) Vector, List, Map 차이점

  • Vector: 인덱슀둜 랜덀 μ ‘κ·Ό κ°€λŠ₯ν•˜μ§€λ§Œ 검색 속도가 느리고 쀑간에 데이터 μ‚½μž…μ΄λ‚˜ μ‚­μ œκ°€ μ–΄λ ΅λ‹€.
  • List: μ‚½μž…κ³Ό μ‚­μ œκ°€ μ‰½μ§€λ§Œ λ°˜λ“œμ‹œ μˆœνšŒν•΄μ•Ό μ›ν•˜λŠ” μžλ£Œλ₯Ό μ°Ύμ„ μˆ˜ μžˆλ‹€.
  • Map: λ§Žμ€ μžλ£Œλ₯Ό μ •λ ¬ν•  μˆ˜ μžˆκ³  λΉ λ₯Έ κ²€μƒ‰μ΄ κ°€λŠ₯ν•˜μ§€λ§Œ μ‚½μž…κ³Ό μ‚­μ œκ°€ μ–΄λ ΅λ‹€.

 

2) Map과 HashMap 차이

  • Map은 ν‚€λ₯Ό μ΄μš©ν•΄ 데이터에 μ ‘κ·Όν•˜κ³  λ‚΄λΆ€ μžλ£Œλ“€μ„ μ •λ ¬ν•œλ‹€. μ΄λ•Œ Map은 λ ˆλ“œ λΈ”λž™ 트리λ₯Ό μ΄μš©ν•˜μ—¬ logN의 속도λ₯Ό κ°€μ§€μ§€λ§Œ HaspMap은 μƒμˆ˜ μ‹œκ°„ 내에 μˆ˜ν–‰ν•  수 μžˆλ‹€. λ°μ΄ν„°μ–‘이 λ§Žμ„ 경우 HaspMap을 μ‚¬μš©ν•˜λŠ” 게 μ’‹λ‹€.
  • Map은 μ •λ ¬λœ μƒνƒœλ‘œ μ €μž₯ν•˜μ§€λ§Œ HashMap은 μ •λ ¬ν•˜μ§€ μ•ŠλŠ”λ‹€. μ™œλƒν•˜λ©΄ μš”μ†Œμ˜ μœ„μΉ˜κ°€ μ€‘μš”ν•˜μ§€ μ•Šκ³  νŠΉμ • μ›μ†Œκ°€ 이 자료ꡬ쑰 μ•ˆμ— μžˆλŠ”μ§€κ°€ μ€‘μš”ν•˜κΈ° λ•Œλ¬Έμ΄λ‹€.
  • STL의 곡식 μ»¨ν…Œμ΄λ„ˆμ—λŠ” HashMap을 λ”°λ‘œ μ •μ˜ν•˜μ§€ μ•Šμ•˜λŠ”λ°, λŒ€μ‹  거의 λ™μΌν•œ κΈ°λŠ₯을 μ œκ³΅ν•˜λŠ” unordered_map을 μ΄μš©ν•΄ μ‚¬μš©ν•  수 μžˆλ‹€.
μ €μž‘μžν‘œμ‹œ (μƒˆμ°½μ—΄λ¦Ό)
'πŸ“ Language/✏ C & C++' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
  • [C++] 정적(Static) 멀버 λ³€μˆ˜μ™€ ν•¨μˆ˜
  • [C++] 얕은 볡사(Shallow Copy)와 κΉŠμ€ 볡사(Deep Copy)
  • [C++] μ˜€λ²„λ‘œλ”©(Overloding)κ³Ό μ˜€λ²„λΌμ΄λ”©(Overriding)
  • [C++] Call by value와 Call by reference
Blxxming
Blxxming
CS 지식과 κ³΅λΆ€ν•˜λ‹€ 배운 것, κ²½ν—˜ν•œ 것 등을 κΈ°λ‘ν•˜λŠ” λΈ”λ‘œκ·Έμž…λ‹ˆλ‹€.
  • Blxxming
    πŸ’‘λ²ˆλœ©πŸ’‘
    Blxxming
  • 전체
    였늘
    μ–΄μ œ
  • 곡지사항

    • Tech Interview
    • πŸ“š Tech (251)
      • πŸ“ Computer Science (96)
        • ✏ OS (12)
        • ✏ Network & Web (10)
        • ✏ Database (11)
        • ✏ Data Structure (6)
        • ✏ Algorithm (40)
        • ✏ Design Pattern (9)
        • ✏ Cloud Computing (3)
        • ✏ (5)
      • πŸ“ AI (5)
        • ✏ AI Tools (3)
        • ✏ Claude (2)
      • πŸ“ Language (73)
        • ✏ Language (6)
        • ✏ C & C++ (11)
        • ✏ C# (19)
        • ✏ JAVA (37)
      • πŸ“ Game (43)
        • ✏ Computer Graphics (2)
        • ✏ Unity (14)
        • ✏ Unreal (26)
        • ✏ (1)
      • πŸ“ Book (34)
        • ✏ Effective (3)
        • ✏ Game Server (16)
        • ✏ Clean Code (14)
        • ✏ (1)
  • hELLOΒ· Designed Byμ •μƒμš°.v4.10.0
Blxxming
[C++] STL μ»¨ν…Œμ΄λ„ˆ(Containers)
μƒλ‹¨μœΌλ‘œ

ν‹°μŠ€ν† λ¦¬νˆ΄λ°”