map、set初次尝试

c++中一共有8中关联容器,分别是:

map                                      //红黑树实现,每个节点保存有key和value,不允许有重复的关键字

multimap                              //同map类似,不同点:允许有重复的关键字

set                                        //红黑树实现,每个节点只有value,不允许有从夫的value

multiset                                //同set类似,不同点:允许有重复的value

unordered_map                   //哈希表实现,每个节点保存有key和value,不允许有重复的关键字

unordered_multimap          //同unordered_map类似 不同点:允许有重复的关键字

unordered_set                    //哈希表实现,每个节点只有value,不允许有重复的value

unordered_multiset           //同unordered_set类似,不同点:允许有重复的value

其中map和multimap位于头文件#include<map>

set和multiset位于#include<set>

unordered_map 和unordered_multimap位于头文件#include<unordered_map>

unordered_set 和unordered_multiset位于头文件#include<unordered_set>

下面一个问题来初次使用map和set

问题如下:

使用关联容器map来记录一个单词出现的个数,不必记录set中存储的被忽略、不需要记录的单词。

思考:我们可以用map的key来表示单词,用value来代表出现的次数。

map<string,size_t> word_cout;

而不必统计的单词用set的初始化:

set<string> noword={"xxx","xxx",......};//这里set也可以用列表进行初始化

额,其余注意点在代码的注释中存在,代码如下:

#include "pch.h"
#include <iostream>
#include<map>
#include<set>
#include<string>
using namespace std;
int main()
{
	map<string, size_t> word_cout;    //定义一个map类型,key为string类型,vlue为size_t类型
	set<string> no_word{ "luoyuanyi","wangjingying" };
	string word;
	while (cin >> word) {
		if(no_word.find(word)==no_word.end())
		++word_cout[word];         //这一句非常关键,这里用了下标,当有word这个关键字的时候,value加1,如果没有的化,创建一个
	}                          //key为word,赋初值vlue为0,然后++
	for (const auto& a : word_cout) {
		cout << a.first << " " << a.second << endl;
	}
}
/*总结:这里呢,对map对象进行下标时,根据key的值来返回vlue,如果没有的话,就会创建一个节点
*/

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值