[C++] Hash μλ£κ΅¬μ‘° / unordered_map μ¬μ©λ²(feat. map)
C++μ ν΄μν μ΄λΈμ unordered_map μ΄λΌλ STLλ‘ κ΅¬νν μ μλ€.
unordered_map ν΄λμ€
λ€μν κΈΈμ΄μ μμ μνμ€λ₯Ό μ μ΄νλ C++ νμ€ λΌμ΄λΈλ¬λ¦¬ 컨ν μ΄λ ν΄λμ€ μ λν API `unordered_map` μ°Έμ‘°μ λλ€.
docs.microsoft.com
* μκ°λ³΅μ‘λ
ν΄μ¬ν μ΄λΈμ key κ°μΌλ‘ νμνκΈ° λλ¬Έμ νμ μκ°λ³΅μ‘λλ O(1) λ°μ κ±Έλ¦¬μ§ μλλ€. λν, μ λ ¬ν νμκ° μμΌλ―λ‘ λ°μ΄ν° μΆκ°, μμ μμλ κ·Έ μ±λ₯μ΄ κΎΈμ€ν 보μ₯λλ€.
* map vs unordered_map
map μ μ λ ¬μ΄ λλ€. λ λλΈλνΈλ¦¬κΈ°λ°μ΄λ―λ‘ νμ, μ½μ , μμ μ O(longN)μ μκ°λ³΅μ‘λκ° κ±Έλ¦°λ€.
unordered_map μ μ λ ¬μ΄ μλλ€. ν΄μν μ΄λΈ κΈ°λ°μ΄λ―λ‘ νμ, μ½μ , μμ μ νκ· O(1), μ΅μ μ κ²½μ° O(N) μ΄ κ±Έλ¦°λ€.
* μ¬μ©λ°©λ²
#include <iostream>
#include <unordered_map>//include
using namespace std;
int main(){
unordered_map<string, int> map; //μ μΈ
//λ°μ΄ν° μ½μ
map.insert(make_pair("a", 1));
map.insert(make_pair("b", 2));
map.insert(make_pair("c", 3));
//λ°μ΄ν° νμ
map.find("a");
cout << "map["a"].first: " << map["a"].first; // a
cout << "map["a"].second: " << map["a"].second; // 1
map.count("a");//keyκ° "a"μΈ μμμ κ°μ ꡬνκΈ°
//λ°μ΄ν° μν
for(auto& i: map){
if(i.first == "b") i.second ++; // map["b"].second = 2;
}
//λ°μ΄ν° μμ
map["a"] = 2;
cout << "map["a"].second: " << map["a"].second; // 2
//λ°μ΄ν° μμ
map.erase("a");
//κΈ°ν
map.empty(); // λΉμ΄μμΌλ©΄ true, κ·Έλ μ§ μλ€λ©΄ falseλ₯Ό λ°ν
map.size(); // mapμ ν¬κΈ°λ₯Ό λ°ν
return 0;
}
*κ΄λ ¨λ¬Έμ
μ½λ©ν μ€νΈ μ°μ΅ - μμ£Όνμ§ λͺ»ν μ μ
μλ§μ λ§λΌν€ μ μλ€μ΄ λ§λΌν€μ μ°Έμ¬νμμ΅λλ€. λ¨ ν λͺ μ μ μλ₯Ό μ μΈνκ³ λ λͺ¨λ μ μκ° λ§λΌν€μ μμ£Όνμμ΅λλ€. λ§λΌν€μ μ°Έμ¬ν μ μλ€μ μ΄λ¦μ΄ λ΄κΈ΄ λ°°μ΄ participantμ μμ£Όν μ μ
programmers.co.kr
#include <string>
#include <vector>
#include <unordered_map>
using namespace std;
string solution(vector<string> participant, vector<string> completion) {
string answer = "";
unordered_map<string, int> map;
for(auto& person : participant) map[person]++;
for(auto& person : completion) map[person]--;
for(auto& person : map) {
if(person.second != 0) {
answer = person.first;
break;
}
}
return answer;
}