Notice
Recent Posts
Recent Comments
Link
ยซ   2025/05   ยป
์ผ ์›” ํ™” ์ˆ˜ ๋ชฉ ๊ธˆ ํ† 
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Tags
more
Archives
Today
Total
๊ด€๋ฆฌ ๋ฉ”๋‰ด

KH_C++

deque, map ๋ณธ๋ฌธ

C++

deque, map

kanghou 2023. 1. 17. 10:32

๐ŸŽˆdeque

deque - (double ended queue) ์ปจํ…Œ์ด๋„ˆ์˜ ๋งจ ์•ž๊ณผ ๋งจ ๋’ค์—์„œ ์‚ฝ์ž…/์ œ๊ฑฐ๋ฅผ ๋น ๋ฅด๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด ๋Œ€ํ‘œ์  ํŠน์ง•์ด๋‹ค. ์Šคํƒ(LIFO)๊ณผ ํ(FIFO)๋ฅผ ํ•ฉ์ณ๋†“์€ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋  ๊ฒƒ ๊ฐ™๋‹ค.


๐ŸŽ‡deque ์˜ ํ—ค๋”ํŒŒ์ผ

#include <deque>


๐ŸŽ‡deque ์˜ ํŠน์ง• (๋‹ค๋ฅธ ์ž๋ฃŒ๊ตฌ์กฐ๋“ค๊ณผ์˜ ๋น„๊ต)

  • vector ์ฒ˜๋Ÿผ ์›์†Œ๋“ค์„ [] ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Random Access ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.
    • stack ๊ณผ queue ์™€ ์ฐจ๋ณ„ํ™”๋œ ๊ฐ•์ 
  • vector ์ฒ˜๋Ÿผ ์›์†Œ๋“ค์„ ์–ด๋–ค ์ˆœ์„œ๋กœ๋“  ์•ž๋กœ๋“  ๋’ค ์›์†Œ๋“ค์„ ์ˆœํšŒํ•  ์ˆ˜ ์žˆ๋‹ค.
  • vector ๊ฐ€ capacity ๊ฐ€ ๊ณ ๊ฐˆ๋˜๋ฉด ์ „์ฒด ๋ฉ”๋ชจ๋ฆฌ ํฌ๊ธฐ์˜ ์ด์ƒ์„ ์žฌํ• ๋‹น ๋ฐ›๋Š” ๊ฒƒ๊ณผ ๋‹ฌ๋ฆฌ deque ๋Š” ์ผ์ • ํฌ๊ธฐ๋ฅผ ๊ฐ€์ง€๋Š” chunk ๋‹จ์œ„๋กœ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ํ™•์žฅ๋œ๋‹ค.
    • vector ๋ณด๋‹ค ํ™•์žฅ ๋น„์šฉ์ด ์ ˆ๊ฐ๋œ๋‹ค.
  • vector ์™€ ๋‹ฌ๋ฆฌ ์—ฐ์† ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์ด ์•„๋‹ˆ๋‹ค.
    • ๋”ฐ๋ผ์„œ vector์™€ ๋‹ฌ๋ฆฌ ํฌ์ธํ„ฐ ์—ฐ์‚ฐ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.
  • list ์ฒ˜๋Ÿผ ์—ฐ์† ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์ด ์•„๋‹ˆ๋‹ค.
  • stack, vector, list ์ฒ˜๋Ÿผ ๋งจ ๋’ค์—์„œ ์‚ฝ์ž…/์ œ๊ฑฐ ํ•˜๋Š” ๊ฒƒ์ด ๋น ๋ฅด๋‹ค.
    • queue ์€ ์˜ค์ง ๋งจ ์•ž์—์„œ๋งŒ ์ œ๊ฑฐ๊ฐ€ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ deque ๋Š” ๋งจ ๋’ค์—์„œ๋„ ์ œ๊ฑฐ๊ฐ€ ๊ฐ€๋Šฅ
    • stack ๊ณผ queue ๊ฐ€ deque ๋กœ ๊ตฌํ˜„ ๊ฐ€๋Šฅํ•œ ์ด์œ .
  • queue, list ์ฒ˜๋Ÿผ ๋งจ ์•ž์—์„œ ์‚ฝ์ž…/์ œ๊ฑฐ ํ•˜๋Š” ๊ฒƒ์ด ๋น ๋ฅด๋‹ค.
    • vector ์™€ ์ฐจ๋ณ„ํ™”๋œ ๊ฐ•์ 
    • stack ์€ ์˜ค์ง ๋งจ ๋’ค์—์„œ๋งŒ ์ œ๊ฑฐ๊ฐ€ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ deque ๋Š” ๋งจ ์•ž์—์„œ๋„ ์ œ๊ฑฐ๊ฐ€ ๊ฐ€๋Šฅ
    • stack ๊ณผ queue ๊ฐ€ deque ๋กœ ๊ตฌํ˜„ ๊ฐ€๋Šฅํ•œ ์ด์œ .
  • list ์™€ ๋‹ฌ๋ฆฌ ๋งจ ๋’ค, ๋งจ ์•ž์ด ์•„๋‹Œ ์ค‘๊ฐ„ ์›์†Œ๋ฅผ ์‚ฝ์ž…/์ œ๊ฑฐ ํ•˜๋Š” ๊ฒƒ์€ ๋А๋ฆฌ๋‹ค.

๐ŸŽ‡ deque์˜ push_front( ) ์™€ pop_front( )๋ฅผ ์ง€์›

: vector์˜ ๊ฒฝ์šฐ push_back( ) , pop_back( ) ๋’ค์—์„œ ์‚ฝ์ž…, ์‚ญ์ œ๋งŒ์„ ์ œ๊ณตํ•œ๋‹ค. ํ•˜์ง€๋งŒ, deque๋Š” 'double-ended queue'์—์„œ ๋ถ™์—ฌ์ง„ ์ด๋ฆ„๋‹ต๊ฒŒ ์ปจํ…Œ์ด๋„ˆ ์–‘์ชฝ ๋์—์„œ ์š”์†Œ๋ฅผ ๋ชจ๋‘ ์‚ฝ์ž…, ์‚ญ์ œ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.

  

๐ŸŽ‡. vector์˜ capacity( ) ์™€ reserve( ) : deque ๊ฐ™์€ ๊ฒฝ์šฐ์—๋Š” ์ด๋Ÿฐ ํ•จ์ˆ˜๊ฐ€ ํ•„์š”์—†๊ธฐ ๋•Œ๋ฌธ์— ์ง€์›ํ•˜์ง€ ์•Š๊ณ  ์žˆ๋Š” ๊ฒƒ์ธ๋ฐ ์ด์œ ๋ฅผ ์•Œ๋ ค๋ฉด ๊ฐ ํ˜•์‹์ด ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์–ด๋–ป๊ฒŒ ๊ด€๋ฆฌ ํ•˜๊ณ  ์žˆ๋Š”์ง€ ์•Œ ํ•„์š”๊ฐ€ ์žˆ๋‹ค.

 

  ๐ŸŽ† vector์˜ ๊ฒฝ์šฐ์—๋Š” ์—ฐ์†๋œ ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

  ex) ์˜ˆ๋ฅผ ๋“ค์–ด 10MB์˜ vector๋Š” ์—ฐ์†๋œ 10MB์˜ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋œ๋‹ค.

   ->ํ•˜์ง€๋งŒ ๊ฒฝ์šฐ์— ๋”ฐ๋ผ์„œ ์—ฐ์†๋œ๊ฒƒ์ด ์•„๋‹ˆ๋ผ 10MB๋ฅผ ์ž‘์€ ๋ธ”๋ก์œผ๋กœ ์—ฌ๋Ÿฌ๊ฐœ ๋‚˜๋ˆ„์–ด์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์„ฑ๋Šฅ์ด ๋” ์ข‹์„ ์ˆ˜๋„ ์žˆ๋‹ค.

 

   ๐ŸŽ† deque์˜ ๊ฒฝ์šฐ ์ž‘์€ ๋ฉ”๋ชจ๋ฆฌ ๋ธ”๋Ÿญ์„ ์—ฐ๊ฒฐํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ๊ตฌ์„ฑํ•œ๋‹ค.


๐ŸŽˆ Map

MAP์€ ๋…ธ๋“œ๊ฐ€ KEY: VALUE ์Œ์œผ๋กœ ์ด๋ฃจ์–ด์ง„ ํŠธ๋ฆฌํ˜•์‹์˜ ๊ตฌ์กฐ์ด๋ฉฐ ์ค‘๋ณต์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค. 

MPA์€ First, Second๊ฐ€ ์žˆ๋Š” Pair๊ฐ์ฒด๋กœ ์ €์žฅ๋˜๋ฉฐ First-key , Second-value๋กœ ์ €์žฅ๋˜๋Š” ํ˜•์‹์„ ๊ฐ€์ง€๊ณ ์žˆ๋‹ค.

C++์˜ STL MAP์˜ ๊ธฐ๋Šฅ์€ ์‹œ๊ฐ„๋ณต์žก๋„ O(log N)์ธ ๋ ˆ๋“œ๋ธ”๋ž™ํŠธ๋ฆฌ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋‹ค.


๐ŸŽ‡map์˜ ๊ธฐ๋ณธํ•จ์ˆ˜ 

๐ŸŽ‡Map์˜ ํ—ค๋”ํŒŒ์ผ 

#include<map>;

 

๐ŸŽ‡Map์˜ ๊ธฐ๋ณธ ํ˜•

map<key, value> m;

map์€ ์ž๋ฃŒ๋ฅผ ์ €์žฅํ• ๋•Œ ๋‚ด๋ถ€์—์„œ ์ž๋™์œผ๋กœ ์ •๋ ฌํ•˜๊ฒŒ ๋œ๋‹ค. ์—ฌ๊ธฐ์„œ map์€ key๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌํ•˜๊ฒŒ ๋˜๋ฉฐ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•˜๊ฒŒ ๋œ๋‹ค.

๋งŒ์•ฝ ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•˜๊ณ ์ž ํ•œ๋‹ค๋ฉด

map<int, int,greater> m;  ์„ ์–ธ ์ดํ›„  ๋ฐ์ดํ„ฐ์— ๋งˆ์ด๋„ˆ์Šค๋ฅผ ๋ถ™์—ฌ ์‚ฝ์ž…ํ•˜๋ฉด ๋‚ด๋ฆผ์ฐจ์ˆœ ์ •๋ ฌ์ด ๋œ๋‹ค.

 

๐ŸŽ‡map ์„ ์–ธํ•˜๊ธฐ 

map<key type, value type>์ด ๊ธฐ๋ณธ ๊ตฌ์กฐ์ด๋ฉฐ  ์„ ์–ธ์‹œ

map<string, int> m;

 

๐ŸŽ‡map search ํ•˜๊ธฐ ( ๋ฐ์ดํ„ฐ ํ™•์ธ ) 

iterator๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ map์˜ ๋ฐ์ดํ„ฐ๋ฅผ ํ™•์ธํ•˜๊ฒŒ ๋œ๋‹ค.

๋ฐ์ดํ„ฐ๋ฅผ ๋๊นŒ์ง€ ์ฐพ์ง€ ๋ชปํ–ˆ์„ ๊ฒฝ์šฐ, iterator๋Š” map.end()๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

#include <iostream>
#include <map>
#include <string>

map<string, int> m;

if(m.find("Alice") != m.end())
{
	cout<<"find"<<endl;
}
else 
	cout<<"not find"<<endl;

๐ŸŽ‡map์— ๋ฐ์ดํ„ฐ ์‚ฝ์ž…

-์œ„์—์„œ๋„ ๋งํ–ˆ์ง€๋งŒ map์€ ๋ฐ์ดํ„ฐ์˜ ์ค‘๋ณต์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋–„๋ฌธ์— insert๋ฅผ ์ง„ํ–‰ํ• ๋•Œ key๊ฐ€ ์ค‘๋ณต์ด ๋œ๋‹ค๋ฉด insert๊ฐ€ ์ˆ˜ํ–‰๋˜์ง€ ์•Š๋Š”๋‹ค.

m.insert({"cam", 300});


๐ŸŽ‡๋ฐ˜๋ณต๋ฌธ ๋ฐ์ดํ„ฐ ์ ‘๊ทผ ( first, second) 

์ธ๋ฑ์Šค ๊ธฐ๋ฐ˜ ๋ฐ˜๋ณต๋ฌธ 

( ์ธ๋ฑ์Šค ๊ธฐ๋ฐ˜์€ iterator๋ฅผ ํ™œ์šฉํ•˜์—ฌ begin() ๋ถ€ํ„ฐ end()๊นŒ์ง€ ์กฐํšŒํ•˜๋Š”๊ฒƒ )

for( auto iter = m.begin(); iter!= m.end(); iter++)
{
	cout<< iter->first <<" "<< iter->second <<endl;
}
cout<< endl;

๋ฒ”์œ„ ๊ธฐ๋ฐ˜ ๋ฐ˜๋ณต๋ฌธ ํ™œ์šฉ 

for(auto iter:m)
{
	cout<<iter.first<<""<iter.second<<endl;
}

๐ŸŽ‡map์—์„œ ๋ฐ์ดํ„ฐ ์‚ญ์ œ 

map์—์„œ ๋ฐ์ดํ„ฐ ์‚ญ์ œํ•˜๊ธฐ ์œ„ํ•ด ํ™œ์šฉํ•˜๋Š” ํ•จ์ˆ˜๋Š” erase์™€ clear์ด๋‹ค 

 

ํŠน์ •์œ„์น˜์˜ ์š”์†Œ ์‚ญ์ œ

m.erase(m.begin()+2);

 

key๊ฐ’์„ ๊ธฐ์ค€์œผ๋กœ ์š”์†Œ ์‚ญ์ œ

m.erase("alice");

map์˜ ๋ชจ๋“  ๋ฐ์ดํ„ฐ ์‚ญ์ œ

erase ํ•จ์ˆ˜๋กœ ๋ชจ๋“  ์š”์†Œ ์‚ญ์ œ (map์˜ begin()๋ถ€ํ„ฐ end()๊นŒ์ง€ )

m.erase(m.begin(), m.end());

clear ํ•จ์ˆ˜๋กœ ๋ชจ๋“  ์š”์†Œ ์‚ญ์ œ

m.clear();


 

Comments