map使用方法
2025-7-13 16:37:20
~map
1.介绍
在C++中,map是一个关联容器,它存储的元素是键值对(key-value pairs)。每个元素都有一个唯一的键,并且可以根据键快速检索对应的值。map中的元素是自动排序的,默认情况下按照键的升序排列,但也可以指定自定义的比较函数来改变排序方式。
2.用法
2.1 头文件
使用map之前,需要包含头文件。
#include <map>
2.2 定义
你可以使用std::map来声明一个map。你可以指定键和值的类型。
map<KeyType, ValueType> mapName;
例如,如果你想要一个将字符串映射到整数的map,可以这样定义:
map<string, int> myMap;
2.3 插入数据
你可以使用insert函数或[]操作符来插入元素。
// 使用insert函数
myMap.insert(std::pair<std::string, int>("one", 1));
myMap.insert(std::make_pair("two", 2));
// 使用[]操作符(如果键不存在则插入,如果存在则更新)
myMap["three"] = 3;
2.4 访问
你可以使用[]操作符或at方法来访问元素。使用[]操作符时,如果键不存在,会自动插入一个具有该键和默认值的元素。使用at方法时,如果键不存在,会抛出std::out_of_range异常。
// 使用[]操作符
int value1 = myMap["one"]; // 返回1
int value3 = myMap["three"]; // 返回3,如果之前已经用[]操作符设置了该键的值的话
int valueNotExist = myMap["four"]; // 返回0(int的默认值),并插入一个键为"four"、值为0的元素
// 使用at方法(不自动插入新键)
try {
int value2 = myMap.at("two"); // 返回2
int valueNotExist = myMap.at("four"); // 抛出std::out_of_range异常,因为"four"不是已存在的键
} catch (const std::out_of_range& e) {
std::cout << "Key not found: " << e.what() << std::endl;
}
2.5 遍历
你可以使用范围for循环或迭代器来遍历map。
// 使用范围for循环
for (const auto& pair : myMap) {
std::cout << pair.first << ": " << pair.second << std::endl;
}
// 使用迭代器
for (std::map<std::string, int>::iterator it = myMap.begin(); it != myMap.end(); ++it) {
std::cout << it->first << ": " << it->second << std::endl;
}
2.6 删除元素
你可以使用erase方法来删除元素。
myMap.erase("one"); // 删除键为"one"的元素
2.7 查找元素
使用find方法可以查找元素。如果找到,返回一个指向该元素的迭代器;如果没有找到,返回一个指向容器末尾的迭代器。
auto search = myMap.find("two"); // 查找键为"two"的元素
if (search != myMap.end()) { // 如果找到了该元素
std::cout << "Found: " << search->first << " => " << search->second << std::endl;
} else {
std::cout << "Not found." << std::endl;
}
2.8 使用样例模板
#include<bits/stdc++.h>
#include<map>
using namespace std;
map<string,short> mp;
int n, age;
string name;
int main(){
scanf("%d", &n);
for(int i = 0; i < n; i++){
cin >> name >> age;
mp[name] = age; // 数组操作符
// pair<string,int> pa(name,age);
// mp.insert(pa);
// mp.insert(make_pair(name,age));
}
map<string,short>::iterator it;
for(it = mp.begin(); it != mp.end(); it++){
cout << it->first << " " << it->second << endl;
}
return 0;
}
我们会审查剪贴板内容,并对发布不合适内容的同学进行相应的处理