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,如果没有的话,就会创建一个节点
*/