【C++】构建哈希表

在这里插入图片描述
首先需要包含头文件

#include <unordered_map> 
using namespace std;

unordered_map在< >中需要指明两个变量类型,第一个是key的类型,第二个是key对应的value的类型

可以单次定义:

unordered_map<char, int> map;
map['A'] = 1;

也可以多个键值对一起定义:

unordered_map<char, int> map={
    {'A',1},
    {'B',2},
    {'C',3}
};

哈希表类型也可以更改,比如 key 和 value 都是 char 类型:

unordered_map<char, char> map={
    {')','('},
    {']','['},
    {'}','{'}
};

在调用哈希表时,注意使用方括号,而不是圆括号

cout << map['A'];

如果需要判断某 key 是否存在于哈希表中,可以使用 count() 函数。
count()返回要查找的key在map的所有key种的出现次数。因为此容器不允许重复,故count()只可能返回 1 或 0,即可判断此key是否存在。

if (map.count('A')) {
	cout << "I'm here";
}
else {
	cout << "I'm not here";
}

另外,还可以使用 find() 函数实现上述功能:

if (map.find('A')==map.end()) {
	cout << "I'm not here";
}
else {
	cout << "I'm  here";
}

猜你喜欢:👇🏻
【C++】判断字符串长度是奇数还是偶数
【C++】cout 换行或空格输出两个数
【C++】构建栈 进栈和出栈

在这里插入图片描述

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
哈希表是一种常用的数据结构,用于存储键值对。在C语言中,我们可以使用数组和链表来实现哈希表。 首先,我们需要定义一个结构体来表示哈希表中的每一个键值对。例如: ```c typedef struct { int key; int value; } KeyValuePair; ``` 接下来,我们需要定义一个数组来存储这些键值对。数组的大小应该足够大,以容纳哈希表中可能出现的所有键值对。例如: ```c #define TABLE_SIZE 1000 KeyValuePair hashTable[TABLE_SIZE]; ``` 然后,我们需要实现一个哈希函数,将键转换为哈希码。哈希函数的选择取决于具体的应用场景。一个简单的哈希函数可以将键除以数组大小取余,作为哈希码。例如: ```c int hashFunction(int key) { return key % TABLE_SIZE; } ``` 接着,我们可以实现插入、查找和删除操作。对于插入操作,我们首先计算键的哈希码,然后将键值对存储在对应的哈希桶中。例如: ```c void insert(int key, int value) { int index = hashFunction(key); hashTable[index].key = key; hashTable[index].value = value; } ``` 对于查找操作,我们首先计算键的哈希码,然后在对应的哈希桶中查找键值对。例如: ```c int find(int key) { int index = hashFunction(key); if (hashTable[index].key == key) { return hashTable[index].value; } else { return -1; // 表示未找到 } } ``` 对于删除操作,我们首先计算键的哈希码,然后在对应的哈希桶中删除键值对。例如: ```c void remove(int key) { int index = hashFunction(key); hashTable[index].key = -1; // 将键设为无效值 } ``` 这样,我们就可以使用数组和链表结合实现一个简单的哈希表。当然,实际应用中还需要考虑处理冲突、动态扩容等问题,但以上是构建哈希表的基本思路。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值