๋‹ค์‹œ ์ •๋ฆฌํ•˜๋Š” C++ STL ์ž๋ฃŒ๊ตฌ์กฐ unordered_map/set

2020. 8. 11. 00:10ใ†PROGRAMMING/C++ STL

 

 

[ STL ์ž๋ฃŒ๊ตฌ์กฐ unordered_map/set ]

 

unordered ์ปจํ…Œ์ด๋„ˆ ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ

unordered_map๊ณผ unordered_set์€ ์ด๋ฆ„ ๊ทธ๋Œ€๋กœ ์ˆœ์„œ๊ฐ€ ์—†๋‹ค.

key๊ฐ’๊ณผ value๊ฐ’์ด ์—ฐ๊ด€์€ ์žˆ์ง€๋งŒ, ์ˆœ์„œ๊ฐ€ ์—†๋‹ค?

์ด ๋ง์€ ๊ฐ key ๊ฐ’๋งˆ๋‹ค ํ•ด์‹œ ๋ฒˆํ˜ธํ‘œ๊ฐ€ ์žˆ์–ด์„œ ์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ฆ‰๊ฐ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค๋Š” ๋ง์ด๋‹ค.

์ฆ‰, STL unordered ์ปจํ…Œ์ด๋„ˆ๋Š” ํ•ด์‹œ(hash) ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค.

ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ์™€ ์„ฑ๋Šฅ์€ ๋ฐ˜๋น„๋ก€ ํ•œ๋‹ค.

STL unordered ์ปจํ…Œ์ด๋„ˆ๋Š” ๋น ๋ฅธ ์„ฑ๋Šฅ์„ ์œ„ํ•ด ๋งŽ์€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ•„์š”๋กœํ•˜๋Š” ๋‹จ์ ์ด ์žˆ๋‹ค.

(๋‚ด๋ถ€์ ์œผ๋กœ vector์™€ list๋ฅผ ๊ฐ™์ด ์“ฐ๊ธฐ ๋•Œ๋ฌธ์— ๋งŽ์€ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ํ•„์š”)

 

int ์ž๋ฃŒํ˜•์˜ ํ•ด์‹œ ํ…Œ์ด๋ธ” ๋ฒˆํ˜ธ

๋ฐ์ดํ„ฐ๋ฅผ ๋‹ด์„ ๋•Œ hashํ•จ์ˆ˜๋ฅผ ๊ฑฐ์ณ์„œ ๋ฒˆํ˜ธํ‘œ๋ฅผ ๋ฐ›๋Š”๋‹ค.

ํ•ด์‹œ๊ฐ’์„ ๋ฏธ๋ฆฌ ๋‚ด๋ถ€์— vector๋กœ ๋งŒ๋“ค์–ด ๋†“๋Š”๋‹ค. (๋ฒ„ํ‚ท์„ ๋งŒ๋“ค์–ด ๋†“๋Š”๋‹ค.)

๋ฒ„ํ‚ท ๋ฒˆํ˜ธ์™€ ํ•ด์‹œ ๊ฐ’์„ ๋งค์นญ ์‹œ์ผœ์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฐพ๋Š”๋‹ค.

์ด๋Ÿฌํ•œ ๊ตฌ์กฐ๋Š” ์‹œ๊ฐ„์ƒ์˜ ์ด๋“์„ ์–ป๊ธฐ์œ„ํ•ด ์‚ฌ์šฉํ•œ๋‹ค. ๋‚ด๊ฐ€ ์ฐพ๋Š” ์›์†Œ๋ฅผ ๋น ๋ฅด๊ฒŒ ์ฐพ๊ธฐ ์œ„ํ•ด์„œ์ด๋‹ค.

ํ•ด์‹œ ๋ฒˆํ˜ธํ‘œ๋ฅผ ํ†ตํ•ด ๋ฐ”๋กœ๋ฐ”๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค.

์ด ๊ตฌ์กฐ๋ณด๋‹ค ๋น ๋ฅด๊ฒŒ ์ฐพ์„ ์ˆ˜ ์žˆ๋Š” ๊ตฌ์กฐ๋Š” ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค.

STL unordered ์ปจํ…Œ์ด๋„ˆ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฐพ๋Š”๋ฐ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„์€ O(1)์ด๋‹ค.

 

 

[ unordered_set์˜ ๋ฉ”๋ชจ๋ฆฌ ๋ชจ์–‘ ]

unordered_set์˜ ๋ฉ”๋ชจ๋ฆฌ ๋ชจ์–‘

๋ฐ์ดํ„ฐ ๊ฐ’๊ณผ ๋งค์นญ ๋˜๋Š” ํ•ด์‹œ ํ…Œ์ด๋ธ” ๊ฐ’์— ๋ฐ์ดํ„ฐ๊ฐ€ ๋“ค์–ด๊ฐ€ ์žˆ๋Š” ๋ชจ์Šต์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

 

[ unordered_multiset์˜ ๋ฉ”๋ชจ๋ฆฌ ๋ชจ์–‘ ]

unordered_multiset ๋ฉ”๋ชจ๋ฆฌ ๋ชจ์–‘

STL unordered_multimap/set์€ ์ค‘๋ณต ๊ฐ’์„ ๋‹ด์„ ์ˆ˜ ์žˆ์–ด์„œ ์œ„์™€ ๊ฐ™์€ ๋ฉ”๋ชจ๋ฆฌ ๋ชจ์–‘์ด ๋‚˜์˜จ๋‹ค.

 

 

 

[ ์‚ฌ์šฉ์ž ์ •์˜ ์ž๋ฃŒํ˜•์„ unordered ์ปจํ…Œ์ด๋„ˆ์— ๋„ฃ๊ธฐ ]

 

์šฐ๋ฆฌ๊ฐ€ ์ง์ ‘ ์ •์˜ํ•œ ์ž๋ฃŒํ˜•(struct, class)์„ unordered ์ปจํ…Œ์ด๋„ˆ์— ๋‹ด๊ธฐ ์œ„ํ•ด์„œ๋Š”?

ํ•ด์‹œ ๋ฒˆํ˜ธํ‘œ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค.

์ฆ‰, hash <> ํ•จ์ˆ˜๋ฅผ ๊ฑฐ์น  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค.

Test ํด๋ž˜์Šค

์‚ฌ์šฉ์ž ์ •์˜ ์ž๋ฃŒํ˜•์„ unordered ์ปจํ…Œ์ด๋„ˆ์— ๋„ฃ๊ธฐ ์œ„ํ•ด ์ž„์˜๋กœ ๋งŒ๋“  ํด๋ž˜์Šค์ด๋‹ค.

์šฐ๋ฆฌ๊ฐ€ ๋งŒ๋“  ์ž๋ฃŒํ˜•์ด hash<> ํ•จ์ˆ˜๋ฅผ ๊ฑฐ์น˜๊ธฐ ์œ„ํ•ด์„œ๋Š”

==์™€ () ์—ฐ์‚ฐ์ž๊ฐ€ const๋กœ ์˜ค๋ฒ„ ๋กœ๋”ฉ๋ผ์žˆ์–ด์•ผ ํ•œ๋‹ค.

 

hash ํŠน์ˆ˜ํ™”

๊ทธ๋Ÿฐ ๋‹ค์Œ hash <> ํ…œํ”Œ๋ฆฟ์— ๋Œ€ํ•ด์„œ ํŠน์ˆ˜ํ™”ํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

 

๋ฐ์ดํ„ฐ ์ถœ๋ ฅ

๋งˆ์ง€๋ง‰์œผ๋กœ unordered_set์— ํด๋ž˜์Šค ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ๊ณ  ๋ฐ์ดํ„ฐ๊ฐ€ ์ž˜ ๋“ค์–ด๊ฐ”๋Š”์ง€ ํ™•์ธํ•ด์ฃผ๋ฉด ๋œ๋‹ค.