📅  最后修改于: 2023-12-03 14:59:46.561000             🧑  作者: Mango
在C++ STL中,Map是一种常用的关联容器,它提供了一种以键值对的形式进行数据存储和快速查找的方式。Map中每对键值对称为一个元素。
当我们在Map中查找某个键对应的值时,如果该键不存在,Map将会返回一个默认值。本文将介绍Map中的默认值是什么,如何定义和修改默认值。
Map中的默认值与Map的模板参数有关。默认情况下,Map的模板参数中指定了键的类型Key
和值的类型T
,当我们查找一个不存在的键时,Map将会自动默认构造出一个值对象并返回。
下面是一个简单的例子,展示了在Map中查找不存在的键时,Map是如何生成默认值的。
#include <iostream>
#include <map>
using namespace std;
int main(){
map<int, string> m; //定义Map,键的类型为int,值的类型为string
string value = m[1]; //尝试查找键为1的值
cout << "Value: " << value << endl; //输出默认值:空字符串
return 0;
}
在上面的例子中,我们定义了一个map<int, string>
类型的Map,并尝试查找不存在的键1
。此时Map将会默认构造出一个空字符串对象并返回。
我们可以通过给Map的T
类型指定一个默认构造器来定义Map的默认值。默认构造器是C++类的一个构造函数,它不需要任何参数,可以用来初始化类的成员变量。
下面是一个例子,展示了如何通过定义Map的默认构造器来自定义默认值:
#include <iostream>
#include <map>
using namespace std;
class Student{
public:
int id;
string name;
Student(){} //构造函数,用于生成默认值
Student(int id, string name):id(id), name(name){}
};
int main(){
map<int, Student> m;
Student defaultStudent(-1, "UNKNOWN"); //定义自定义的默认值
m[1] = Student(1, "Tom");
m[2] = Student(2, "Jerry");
Student value1 = m[1]; //查找已存在的键,返回对应的值对象
Student value2 = m[3]; //查找不存在的键,返回定义的默认值
m[-1] = defaultStudent; //手动指定默认值
cout << "Value1: " << value1.id << " " << value1.name << endl; //输出:Value1: 1 Tom
cout << "Value2: " << value2.id << " " << value2.name << endl; //输出:Value2: -1 UNKNOWN
cout << "Value-1: " << m[-1].id << " " << m[-1].name << endl; //输出:Value-1: -1 UNKNOWN
return 0;
}
在上面的例子中,我们定义了一个map<int, Student>
类型的Map,并自定义了一个Student
类作为值类型。我们通过定义Student
类的默认构造器来自定义了默认值为Student(-1, "UNKNOWN")
。当我们查找不存在的键时,Map会自动构造出这个默认值对象并返回。
注意,我们还可以通过手动向Map中插入一个默认值,来实现随时修改Map中的默认值的功能。
本文介绍了C++ STL中Map的默认值的概念和用法,包括了默认值的生成方式、如何定义自定义的默认值以及如何手动修改默认值。Map的默认值在实际使用中非常有用,可以大大简化代码逻辑,提高代码的可读性和可维护性。