[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 (246)
      • ๐Ÿ“ Computer Science (96)
        • โœ OS (12)
        • โœ Network & Web (10)
        • โœ Database (11)
        • โœ Data Structure (6)
        • โœ Algorithm (40)
        • โœ Design Pattern (9)
        • โœ Cloud Computing (3)
        • โœ (5)
      • ๐Ÿ“ 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)
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”