C++——map|set2
创始人
2024-05-21 09:56:49
0

目录

map::operator[] 

[ ]的实现 

multimap 

习题 前K个高频单词 

两个数组的交集 

 底层结构


 

pair有俩个成员一个是first,一个是second 

由于pair有俩个模板参数,第一个是first,一个是second

map的insert参数类型是valud_type,value_type就是pair

 pair的key_type对应map的第一个模板参数Key,也就是pair的first

mapped_type对应map的第二个模板参数T,也就是pair的second

map::iterator it = countMap.find(str);

这里的string就是第一个模板参数相当于pair的first,int是第二个模板参数相当于pair的second

统计出现的次数

#include
#include
using namespace std;
int main()
{string arr[] = { "苹果", "西瓜", "苹果", "西瓜", "苹果", "苹果", "西瓜", "苹果", "香蕉", "苹果", "香蕉" };map countMap;for (auto& str : arr){map::iterator it = countMap.find(str);if (it != countMap.end())//找到了{//(*it).second++;//it->->second;it->second++;}else //没找到{countMap.insert(make_pair(str, 1));//没找到就插入}}map::iterator it = countMap.begin();while (it != countMap.end()){cout << it->first << it->second << endl;it++;}cout << endl;return 0;
}

map::operator[] 

 map容器重载了 [] 运算符,只要知道 map 容器中某个键值对的键的值,就可以向获取数组中元素那样,通过键直接获取对应的值。

[]的返回值是value的引用,如果k不存在,函数会插入一个新的元素,然后返回。

1.map当中有key,返回value的引用(可查找,修改value)

2.map中没有key,会插入一个新元素,新元素是pair(key,V());第一个是key,第二个是value的匿名对象,然后返回value的引用,(可充当插入+修改)

  

这种插入若str不在countMap中,会插入 pair(str,int());,然后再对返回的次数++

如果str在countMap中,返回value(次数)的引用,次数++

[ ]的实现 

 

 insert的返回类型是pair

 insert的返回值

1.key已经在map中,返回pair(key_iterator,false)第一个参数是key的迭代器,如果已经存在第二个参数返回false

2.key不在map中,返回pair(new_key_iterator,true);

模拟实现

 ret.first是迭代器,first->second是value

multimap 

 即使重复,multimap仍然会继续插入

习题 前K个高频单词 

692. 前K个高频单词 - 力扣(LeetCode)

 优先级队列

 这里认为是在建大堆

class Solution {
public:
struct Less//构造大堆
{bool operator()(const pair& kv1,const pair& kv2 )const{if(kv1.secondkv2.first)//出现次数一样,比较字典序大小,大的在前面return true;return false;}
};vector topKFrequent(vector& words, int k) {map countMap;for(auto &str:words){countMap[str]++;}//统计出现的个数typedef priority_queue, vector>,Less> maxHeap;maxHeap mh(countMap.begin(),countMap.end());vector v;while(k--){v.push_back(mh.top().first);mh.pop();}return v;}
};

这里如果用sort排序会非常的麻烦

用stable_sort

 这里不能用map,map会去重

class Solution {
public:vector topKFrequent(vector& words, int k) {map countMap;for(auto &str:words){countMap[str]++;}//统计出现的个数multimap> sortMap;for(auto& kv:countMap){sortMap.insert(make_pair(kv.second,kv.first));}vector v;multimap>::iterator it=sortMap.begin();for(size_t i=0;isecond);++it;}return v;}
};

两个数组的交集 

class Solution {
public:vector intersection(vector& nums1, vector& nums2) {
set s1(nums1.begin(),nums1.end());
set s2(nums2.begin(),nums2.end());
vector v;
auto it1=s1.begin();
auto it2=s2.begin();
while(it1!=s1.end()&&it2!=s2.end())
{if(*it1<*it2)it1++;else if(*it2<*it1)it2++;else{v.push_back(*it1);it1++;it2++;}
}
return v;}
};

 349. 两个数组的交集 - 力扣(LeetCode)

 底层结构

这几个容器有个共同点是:其底层都是按照二叉搜索树来实现的,但是二叉搜索树有其自身的缺陷,假如往树中插入的元素有序或者接近有序,二叉搜索树就会退化成单支树,时间复杂度会退化成O(N),因此map、set等关联式容器的底层结构是对二叉树进行了平衡处理,即采用平衡树来实现。
 

相关内容

热门资讯

优美的七夕祝福语 2020年优美的七夕祝福语汇总38条  七夕到了,给心爱的人表白吧!今天不表白,又要错过最美的时光了...
给朋友儿子的结婚祝福贺词 给朋友儿子的结婚祝福贺词大全  祝福语是指对人们的美好祝福的语句。祝福语在社会发展中已经不是仅限于在...
墓碑对联七言 墓碑对联大全七言  墓碑是人类对死者埋葬处所做的一种纪念性的载体,一般用于对联的刻字。  上联:志同...
收到祝福后的感谢语 收到祝福后的感谢语大全  今天,我在遥远的地方,把您给予我的昨天,折叠成记忆的小船,任其飘荡在思念的...
教师节感恩老师的祝福语 教师节感恩老师的祝福语(通用15篇)  在生活、工作和学习中,大家都经常接触到祝福语吧,祝福语往往灵...
考上大学的简短祝福语 考上大学的简短祝福语(精选240句)  在日常学习、工作和生活中,大家总免不了要接触或使用祝福语吧,...
五一国际劳动节祝福语 五一国际劳动节祝福语汇总29条  笑是一种无言的开脱,能记住最美的瞬间,记住最甜的内容,记住最真的故...
给朋友的国庆节祝福语短信 2020年给朋友的国庆节祝福语短信大汇总65句  国庆假期好休闲,天天面对天花板。祝愿您全家都安康,...
送鲜花的祝福语 送鲜花的祝福语(精选250句)  在生活、工作和学习中,大家总免不了要接触或使用祝福语吧,祝福语可以...
圣诞节祝福语短信 2020年圣诞节祝福语短信锦集27条  快乐的时光,鸟儿在歌唱,愉快的念头在心中飘荡;笑容洋溢在幸福...
中秋节祝老师简短祝福语 中秋节祝老师简短祝福语(精选180句)  在日常学习、工作或生活中,大家都尝试过写祝福语吧,祝福语可...
公司搬家祝福语 公司搬家祝福语80句  搬家指从一个地方搬到一个新的地方。纵观现代人的一生总会有几次的变迁与异动。以...
步入小学祝福语 步入小学祝福语  在平时的学习、工作或生活中,大家都写过祝福语吧,祝福语能给亲朋好带去好运和欢乐。怎...
朋友生女儿祝福语 朋友生女儿祝福语  人生中一大喜事,养儿育女我想大家不管是经历过的还是没有经历过的就这件事来说都是值...
春节对联 横批 春节对联 横批  每逢春节,无论城市还是农村,家家户户都要挑漂亮的'红春联贴于门上,辞旧迎新,增加喜...
生日的暖心祝福语 生日的暖心祝福语(精选60句)  在日常学习、工作或生活中,许多人都写过祝福语吧,借助祝福语人们可以...
经典的生日祝福语 经典的生日祝福语大全  导语:青春的树越长赵葱茏,生命的花就越长越艳丽。在你生日的这一天,请接受我对...
婚礼红包上的祝福语 婚礼红包上的祝福语(通用240句)  在日常学习、工作抑或是生活中,大家都写过祝福语,肯定对各类祝福...
端午节简洁祝福语 端午节简洁祝福语(通用180句)  在日常的学习、工作、生活中,要用到祝福语的情况还是蛮多的,祝福语...
新婚祝福语 新婚祝福语(通用145句)  祝福语是指对人们的美好祝福的语句。祝福语在社会发展中已经不是仅限于在节...