c++实现HashMap
时间: 2023-11-10 14:06:35 浏览: 81
HashMap(哈希表)是一种常用的数据结构,可以用来实现快速的查找、插入和删除操作。在C++中,可以使用STL中的unordered_map实现HashMap,也可以自己手动实现。
以下是一个C++手动实现的HashMap代码示例:
```c++
#include <iostream>
#include <vector>
using namespace std;
class HashMap {
private:
vector<pair<int, int>>* data;
int size;
int hash(int key) {
return key % size;
}
public:
HashMap(int s) {
size = s;
data = new vector<pair<int, int>>[size];
}
void put(int key, int value) {
int index = hash(key);
for (auto& pair : data[index]) {
if (pair.first == key) {
pair.second = value;
return;
}
}
data[index].push_back(make_pair(key, value));
}
int get(int key) {
int index = hash(key);
for (auto& pair : data[index]) {
if (pair.first == key) {
return pair.second;
}
}
return -1;
}
void remove(int key) {
int index = hash(key);
auto& pairs = data[index];
for (auto it = pairs.begin(); it != pairs.end(); it++) {
if (it->first == key) {
pairs.erase(it);
return;
}
}
}
~HashMap() {
delete[] data;
}
};
int main() {
HashMap map(10);
map.put(1, 1);
map.put(2, 2);
cout << map.get(1) << endl; // 输出1
cout << map.get(3) << endl; // 输出-1
map.put(2, 3);
cout << map.get(2) << endl; // 输出3
map.remove(2);
cout << map.get(2) << endl; // 输出-1
return 0;
}
```
在上面的代码中,我们使用了一个vector数组来存储数据。每个vector元素是一个pair,第一个元素是key,第二个元素是value。在put操作时,我们使用hash函数来计算key对应的index,然后遍历该index对应的vector,如果找到了相同的key,则更新value,否则加入一个新的pair。在get操作时,同样使用hash函数计算key对应的index,然后遍历该index对应的vector,查找相同的key,并返回其对应的value。在remove操作时,也是先计算key对应的index,然后查找相同的key,并将其从vector中删除。
需要注意的是,在删除操作时,我们使用了auto&来引用pairs变量,这样可以避免在遍历过程中对pairs进行拷贝,提高了效率。
阅读全文