刷题使用c++哈希表-map和unordered_map,应该注意的点

map和unordered_map

  • 为啥写这篇博客
  • map和unordered_map
    • map_name.erase()
    • map_name.find()
    • map_name.size()
    • map_name.insert()和其“映射插入”
  • 最近碰到的,用它可以解决的题目(前面几天博客中的,里面有简便版解析)

为啥写这篇博客

最近刷题总能碰到用哈希表解题,可能最近刷数组和字符串相关的题比较多吧,然后就使用它比较多,说几下使用时要注意的点和我刷的那些用到了的题(不是只有用哈希表解题的题,是我用它解题的题)。

map和unordered_map

unordered_map和map的区别就是map是会将键值对根据(key)进行排序的,而unordered_map不会,而且map中不允许存在键值相同的键值对。(个人刷题碰到要用它的一般都是用unordered_map,但map也有它的好处,比如它会直接进行键值排序)

map_name.erase()

我们用erase()删除map里面的成员一般习惯都是像vector容器那样用迭代器删除,但还有一种删除形式,我刷题看别人评论题解无意看到的(开始不知道,学的时候学的不够全)
可以通过删除键(key)去删除掉map里面对应的成员,对应的句式:map_name.erase(key);

举个例子:

#include
using namespace std;

int main(){
	unordered_map<int,int> mp;
	// 插入三个键值对
	mp.insert(make_pair<int,int>(8,999));
	mp.insert(make_pair<int,int>(7,888));
	mp.insert(make_pair<int,int>(6,777));
	//遍历这些键值对
	cout<<"Before delete key-value:"<<endl;
	for(auto it = mp.begin();it!=mp.end();++it){
		cout<<it->first<<" "<<it->second<<endl;
	}
	
	//删除键(key)为6的成员
	mp.erase(6);
	//遍历删除后的键值对
	cout<<"After delete one key-value:"<<endl;
	for(auto it = mp.begin();it!=mp.end();++it){
		cout<<it->first<<" "<<it->second<<endl;
	}
	return 0;
}

输出:
刷题使用c++哈希表-map和unordered_map,应该注意的点_第1张图片

map_name.find()

这里是需要注意的点了:

  1. map里是有find函数可以调用的,不可以和algorithm里面的混淆。
  2. map中find函数里面的参数是和key对应的,(不是value)是查找key对应的对键值,返回值和algorithm中的find一样,是key对应的迭代器。没查到就返回map_name.end();

map_name.size()

就是返回map键值对的个数,函数返回值意义和其他容器是一样的,只是比较常用,还是提一下

map_name.insert()和其“映射插入”

句式:map_name.insert(make_pair(a,b));与map_name[a] = b;等价
举例:

#include
using namespace std;

int main(){
	unordered_map<int,int> mp;
	// 插入三个键值对
	mp.insert(make_pair<int,int>(8,999)); //和mp[8] = 999一致
	mp.insert(make_pair<int,int>(7,888)); //和mp[7] = 888一致
	mp.insert(make_pair<int,int>(6,777)); //和mp[6] = 777一致
	//遍历这些键值对
	for(auto it = mp.begin();it!=mp.end();++it){
		cout<<it->first<<" "<<it->second<<endl;
	}
	return 0;
}

注意点:
map和unordered_map是关联式容器,不可以使用algorithm库里面的一些函数,比如sort,想使用的话可以把map里面的成员存取到vector>,然后再进行sort,而且这种方式也可以对unordered_map里面的value进行排序,而即使用map,那也只是key是对应有序的。

最近碰到的,用它可以解决的题目(前面几天博客中的,里面有简便版解析)

该篇博客中的第三题:290.单词规律和763.划分字母区间
该篇博客中的最后一题:560.和为k的子数组
(题很多找不着了,比如还有昨天刷到的一道leetcode两个篮子摘果子的,不回忆了,可以拿这些题去练手)

刷题使用c++哈希表-map和unordered_map,应该注意的点_第2张图片

你可能感兴趣的:(STL,c++,c++,散列表,算法)