#include <iostream>
#include <vector>
using namespace std;
using uint = unsigned int;
using namespace std;
// 해시_맵 클래스
class Hash_map {
private:
vector<int> data;
public:
// 해시 맵 생성자
Hash_map(size_t n) {
data = vector<int>(n, -1);
// 벡터의 모든 원소를 -1로 초기화
// data 벡터 값이 -1이라는 것은 해당 위치에 저장된 원소가 없음을 의미
}
// 삽입 함수
void insert(uint value) {
int n = data.size();
if (data[value % n] == -1) {
data[value % n] = value;
cout << value << "를 " << "[" << value % n << "] 위치에 삽입" << endl;
}
else {
cout << "기존에 저장된 " << data[value % n] << "를 덮어써 ";
data[value % n] = value;
cout << value << "를 " << "[" << value % n << "] 위치에 삽입" << endl;
}
}
// 룩업 함수
void find(uint value) {
int n = data.size();
if (data[value % n] == value) {
cout << "발견 !" << endl;
}
else {
cout << "없음 !" << endl;
}
}
// 삭제 함수
void erasse(uint value) {
int n = data.size();
if (data[value % n] == value) {
data[value % n] = -1;
cout << value << "를 삭제" << endl;
}
else {
cout << "해당 원소가 삽입된 적이 없거나 덮여써짐" << endl;
}
}
};
int main() {
Hash_map hashMap(7);
hashMap.insert(2);
hashMap.insert(25);
hashMap.insert(10);
hashMap.find(25);
hashMap.insert(100);
hashMap.find(100);
hashMap.find(2);
hashMap.erasse(25);
}
#include <iostream>
#include <vector>
/*체이닝 기법을 위해 추가*/
#include <list>
#include <algorithm>
using namespace std;
using uint = unsigned int;
using namespace std;
// 해시_맵_체이닝 클래스
class Hash_Chaining_map {
private:
vector<list<int>> data;
public:
// 해시 맵 생성자
Hash_Chaining_map(size_t n) {
data.resize(n);
}
// 삽입 함수
void insert(uint value) {
int n = data.size();
// 이미 값이 있는지 확인한 후 추가하도록 구현할수도 있음
data[value % n].push_back(value);
cout << value << "를 " << "[" << value % n << "] 위치에 삽입" << endl;
}
// 룩업 함수
void find(uint value) {
int n = data.size();
list<int>& chain = data[value % n];
// 룩업
for (auto iter = chain.begin(); iter != chain.end(); ++iter) {
if ((*iter) == value) {
cout << "발견!" << endl;
return;
}
}
cout << "없음!" << endl;
return;
}
// 삭제 함수
void erasse(uint value) {
int n = data.size();
list<int>& chain = data[value % n];
// 룩업
for (auto iter = chain.begin(); iter != chain.end();) {
if ((*iter) == value) {
iter = chain.erase(iter);
cout << value << "를 삭제" << endl;
}
else {
iter++;
}
}
}
};
int main() {
Hash_map hashMap(7);
/* 체이닝이 도입된 해시맵 */
{
Hash_Chaining_map hashMap(7);
hashMap.insert(2);
hashMap.insert(25);
hashMap.insert(10);
hashMap.insert(100);
hashMap.insert(55);
hashMap.find(100);
hashMap.find(2);
hashMap.erasse(2);
}
}
source: https://minho-jang.github.io/development/19/