1.哈希表定义
头文件:#include<unordered_map>
键值对都为int类型的哈希表
unordered_map<int, int> hashtable;
2.find方法
从哈希表中寻找目标
auto it = hashtable.find(target);
target为目标 如果没找到 那么 it == hashtable.end();
3.哈希表添加元素
(1)通过下标添加
hashtable[ 1 ] = 2;
(2) insert函数添加 (可覆盖原有元素)
hashtable.insert( {1,2} );
cout << hashtable[1] << endl; //输出结果为2
4.可复制原有哈希表创建新的哈希表
unordered_map<int, int> hmap{ {1,10},{2,12},{3,13} };
unordered_map<int, int> hmap1(hmap);
实际上哈希表的存放可以看作一个键值对。例如我当前要将小明的成绩记录到哈希表中,语文:90 数学:100,那么我应该这样写
#include <unordered_map>
unordered_map<string,int> score;
score["Chinese"] = 90;
score.insert( {"math”,100 } );
如果现在我要查他的物理成绩 那么auto a=score.find("物理");
若a == score.end(),那么查找失败
问题来了,如果我现在想知道小明哪一门考了100,代码应该怎么写呢?
int scoreToFind=100;
for (const auto& pair : studentScores) {
if (pair.second == scoreToFind) {
subject = pair.first;
found = true;
break; // 找到第一个匹配项后退出循环
}
}
算法题:
一、两数之和 不用暴力解
这题就是哈希函数的简单运用
二、字母异位词分组
注意点:
1.用到了sort函数 将字母排序后再比较
2.push_back函数 将元素放入容器末位
三、最长连续序列
注意点:1.用集合set 会自动按从小到大排序
2.count函数set查找集合中是否存在目标值
3.该算法思想为先判断该值是不是连续序列的第一个元素 如果不是则跳过,如果是再进行计数比较