这里写目录标题
- map【有序哈希表】使用方法
- 1.头文件:
- 2.创建map:
- 3.添加键值对:
- 4.查找键值对:
- 5.遍历键-值对:
- 5.综合示例:班级学生
map【有序哈希表】使用方法
话不多说,接着讲map用法:
map:映射,存储键-值对,并按键升序排序。
1.头文件:
#include <iostream>
#include <map>
2.创建map:
map<string, int> myMap; // 创建一个从字符串到整数的映射
3.添加键值对:
insert(pair<Key, Value>(key, value)):向映射中插入键-值对
//使用make_pair将参数变成键值对类型myMap.insert(make_pair("c1",v1) );myMap.insert(make_pair("c2", v2));myMap.insert(make_pair("c3", v3));//或者直接使用花括号myMap.insert({"c4",v4});
4.查找键值对:
find(key)
:查找映射中是否存在特定键,返回迭代器。count(key)
:统计特定键在映射中的出现次数(对于std::map
,要么是0,要么是1)。
// 5.查找键值对int times = myMap.count("c2");if (times == 1) {cout << "存在班级c2" << endl;} else {cout << "不存在班级c2" << endl;}//找出班级c3的所有学生map<string, vector<string>>::iterator it;it = myMap.find("c3");if(it != myMap.end()) {cout << "班级c2的学生: ";for (string stu : it->second) {cout << stu << " ";}}
5.遍历键-值对:
- 使用迭代器可以遍历整个映射
void printMap1(map<string, vector<string>>& myMap) {map<string, vector<string>>::iterator it;for (it = myMap.begin(); it != myMap.end();it++) {cout << "班级: " << it->first << " 学生:";for (const string& stuName : it->second){cout << stuName << ", ";}cout << endl;}
}
5.综合示例:班级学生
#include <iostream>
#include <set>
#include <string>
#include <map>
#include <vector>
using namespace std;//输出每个班级的人
void printMap(map<string, vector<string>>& myMap) {for (const auto& pair : myMap) {cout << "班级: " << pair.first << " 学生:";for (const auto& stuName : pair.second){cout << stuName << ", ";}cout << endl;}}void printMap1(map<string, vector<string>>& myMap) {map<string, vector<string>>::iterator it;for (it = myMap.begin(); it != myMap.end();it++) {cout << "班级: " << it->first << " 学生:";for (const string& stuName : it->second){cout << stuName << ", ";}cout << endl;}}int main() {// 使用map存储班级-学生信息,班级是key,学生信息是value,一个字符串数组// 1.创建mapmap<string, vector<string>> myMap;// 2.准备数据vector<string> v1 = {"张三","李四","王五"};vector<string> v2 = {"李寻欢","二郎神","游所为"};vector<string> v3 = {"郭靖","杨过","黄蓉"};vector<string> v4 = {"jack","Tom","Lina"};// 3.给map添加元素的两种办法: //在 map 中,键值对的插入语法应该使用 make_pair 或者花括号 {}myMap.insert(make_pair("c1",v1) );myMap.insert(make_pair("c2", v2));myMap.insert(make_pair("c3", v3));myMap.insert({"c4",v4});//输出每个班级的人printMap(myMap);// 4.删除指定键值对myMap.erase("c4");printMap1(myMap);// 5.查找键值对int times = myMap.count("c2");if (times == 1) {cout << "存在班级c2" << endl;} else {cout << "不存在班级c2" << endl;}//找出班级c3的所有学生map<string, vector<string>>::iterator it;it = myMap.find("c3");if(it != myMap.end()) {cout << "班级c2的学生: ";for (string stu : it->second) {cout << stu << " ";}}return 0;
}
综合示例2:统计单词频率
#include <iostream>
#include <map>
#include <string>
#include <sstream>
using namespace std;/*
@description: 本文件介绍有序map容器用法02
@author zhengshihong
*/int main() {string text = "this is a simple example of using std map this is example";map<string, int> wordFrequency;// 将文本拆分为单词并统计频率// istringstream 是 C++ 中的输入流,它可以从字符串中读取数据,就像 cin 从标准输入中读取数据一样。istringstream iss(text);//创建了一个 istringstream 对象 iss,并用给定的文本 text 来初始化它string word;//定义了一个字符串变量 word,用于存储从 iss 读取的每个单词。//它不断从 iss 中读取单词,并将每个单词存储在 word 变量中while (iss >> word) {// 将单词插入映射,如果已存在则增加频率wordFrequency[word]++;//使用 word 作为键,将单词插入到名为 wordFrequency 的映射(map 或 unordered_map)中。//如果已存在key等于单词,则频率加1,不存在则增加等于单词的key,并初始化频率为1}// 输出每个单词的频率for (const auto& pair : wordFrequency) {cout << pair.first << ": " << pair.second << endl;}return 0;
}
那么map的用法就讲到这里,下一章看vector的用法。