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;
}



我们会审查剪贴板内容,并对发布不合适内容的同学进行相应的处理