📜  C++ STL中的Map中的默认值(1)

📅  最后修改于: 2023-12-03 14:59:46.561000             🧑  作者: Mango

C++ STL中的Map中的默认值

在C++ STL中,Map是一种常用的关联容器,它提供了一种以键值对的形式进行数据存储和快速查找的方式。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的默认值

我们可以通过给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的默认值在实际使用中非常有用,可以大大简化代码逻辑,提高代码的可读性和可维护性。