๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿ“ ์•Œ๊ณ ๋ฆฌ์ฆ˜/Code Tree

[์ฝ”๋“œํŠธ๋ฆฌ] Hash Set

SW์ค‘์‹ฌ๋Œ€ํ•™ ์‚ฌ์—…๋‹จ์—์„œ CodeTree์™€ ํ•จ๊ป˜ ์‹ค์‹œํ•œ ์ฝ”๋”ฉํ…Œ์ŠคํŠธ ๋Œ€๋น„ ์บ ํ”„์— ์ฐธ์—ฌํ•˜์—ฌ ๊ณต๋ถ€ํ•œ ๋‚ด์šฉ์„ ์ •๋ฆฌํ•˜์˜€์Šต๋‹ˆ๋‹ค.

 

* ์ฐธ๊ณ  : python๊ณผ c++, java ๋“ฑ ์–ธ์–ด๋ณ„๋กœ ์„ค๋ช…์ด ๋‹ค๋ฅธ ๋ถ€๋ถ„ ์กด์žฌ! ํ•„์ž๋Š” c++ ์‚ฌ์šฉ.

 

xxilliant ์ œ์ž‘

unordered_set STL

C++์—์„œ๋Š” unordered_set์ด๋ผ๋Š” STL์„ ์ด์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

unordered_set์€ HashSet ์ž๋ฃŒ๊ตฌ์กฐ๋กœ ๋˜์–ด์žˆ์œผ๋ฉฐ, ์ด HashSet์ด ๋ฐ”๋กœ ํ•ด์‹ฑ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ฐ์ดํ„ฐ๋“ค์„ ๊ด€๋ฆฌํ•ด์ฃผ๋Š” ์ž๋ฃŒ๊ตฌ์กฐ ์ž…๋‹ˆ๋‹ค.

๋ชจ๋“  ํ•จ์ˆ˜์˜ ์‹œ๊ฐ„๋ณต์žก๋„๋Š” ์ž…๋‹ˆ๋‹ค.

 

unordered_set์€ set๋ณด๋‹ค ์†๋„๊ฐ€ ๋น ๋ฅด์ง€๋งŒ, ๊ฐ’์˜ ์กด์žฌ ์—ฌ๋ถ€์—๋งŒ ๊ด€์‹ฌ์ด ์žˆ์ง€ ๊ทธ ์ˆœ์„œ์—๋Š” ์ „ํ˜€ ๊ด€์‹ฌ์ด ์—†๋Š” ์ž๋ฃŒ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค.

 

#include <unordered_set> ํ—ค๋”์™€, unordered_set<T> name; ํ˜•ํƒœ์˜ ์„ ์–ธ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

T๋Š” type์œผ๋กœ, unordered_set ์•ˆ์— ๋“ค์–ด๊ฐˆ ์›์†Œ์˜ ํƒ€์ž…์„ ์ ์–ด์ค˜์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋˜, unordered_set์€ ์›๋ž˜ std::unordered_set์œผ๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

 

#include <iostream>
#include <unordered_set>

using namespace std;

int main() {
    unordered_set<int> s;
    return 0;
}
 

unordered_set์„ ์ด์šฉํ•  ๋•Œ ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ๊ฒƒ์€ ๋‹ค์Œ 3๊ฐ€์ง€ ์ž…๋‹ˆ๋‹ค. unordered_set<int> s;๋กœ ์„ ์–ธ๋˜์–ด ์‚ฌ์šฉ๋  ๋•Œ๋ฅผ ์˜ˆ๋กœ ์„ค๋ช…ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

  1. s.insert(E)

hashset์— ๋ฐ์ดํ„ฐ E๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

 

  1. s.erase(E)

ํ˜„์žฌ hashset์— ๋“ค์–ด์žˆ๋Š” ๋ฐ์ดํ„ฐ ์ค‘ ์ˆซ์ž E๋ฅผ ์ฐพ์•„ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.

 

  1. s.find(E)

ํ˜„์žฌ hashset์— ์ˆซ์ž E๊ฐ€ ๋“ค์–ด ์žˆ๋Š”์ง€๋ฅผ ์ฐพ์Šต๋‹ˆ๋‹ค. ์žˆ๋‹ค๋ฉด ํ•ด๋‹น iterator๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋ฉฐ, ์—†๋‹ค๋ฉด s.end()๊ฐ’์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๊ฐ’์ด ์žˆ๋‹ค๋ฉด s.find(E) != s.end(), ์—†๋‹ค๋ฉด s.find(E) == s.end()๋ฅผ ๋งŒ์กฑํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

 

#include <iostream>
#include <unordered_set>

using namespace std;

int main() {
    unordered_set<int> s;      // ์ •์ˆ˜๋ฅผ ๊ด€๋ฆฌํ•  hashset์„ ์„ ์–ธํ•ฉ๋‹ˆ๋‹ค. => ๋นˆ set
    s.insert(3); 
    s.insert(9);
    s.insert(5);
    
    if(s.find(3) != s.end()) { // ์ˆซ์ž 3์ด set์— ์žˆ๋‹ค๋ฉด
        cout << "exists!" << endl;
    }

    s.erase(9);                   // ์ˆซ์ž 9๋ฅผ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.
    if(s.find(9) == s.end()) { // ์ˆซ์ž 9๊ฐ€ hashset์— ์—†๋‹ค๋ฉด
        cout << "not exists!" << endl;
    }

    return 0;
}

 

์ถœ์ฒ˜ ์ฝ”๋“œํŠธ๋ฆฌ