C++标准模板库(STL)map关联容器

一、定义与头文件

1. 定义

在C++中,map是一种关联容器。它以键 - 值(key - value)对的形式存储数据,其中键是唯一的,并且按照特定的顺序进行排列(默认是按照键的小于操作符进行升序排列)。例如,可以将学生的学号作为键,学生的成绩作为值存储在map中。

2. 头文件

需要包含<map>头文件才能使用map容器。

二、基本操作

1. 创建map对象

可以通过以下方式创建一个空的map:

std::map<int, std::string> myMap;     // 这里创建了一个map,键为int类型,值为std::string类型。

也可以在创建时初始化:

std::map<int, std::string> myMap = { {1, "Alice"}, {2, "Bob"} };

2. 插入元素

使用insert方法:

myMap.insert(std::make_pair(3, "Charlie"));

或者使用下标操作符(如果键不存在则插入新元素,如果键存在则更新值):

myMap[4] = "David";

3. 查找元素

使用find方法。例如:

std::map<int, std::string>::iterator it = myMap.find(3);

如果it!= myMap.end(),则表示找到了键为3的元素,可以通过it->second访问对应的值。

4. 遍历map

可以使用迭代器遍历map。例如:

for (auto it = myMap.begin(); it!= myMap.end(); ++it) {
    std::cout << "Key: " << it->first << ", Value: " << it->second << std::endl;
}

或者使用基于范围的for循环(C++11及以上):

for (const auto& [key, value] : myMap) {
    std::cout << "Key: " << key << ", Value: " << value << std::endl;
}

5. 删除元素

使用erase方法。例如:

如果要删除键为3的元素:myMap.erase(3);

也可以通过迭代器删除:

auto it = myMap.find(3);
if (it!= myMap.end()) {
    myMap.erase(it);
}

三、元素排序

1. 默认排序

如前面所述,map默认按照键的小于操作符进行升序排列。对于自定义类型作为键时,需要定义小于操作符(operator<)。

2. 自定义排序

如果想要按照自定义的规则对map进行排序,可以使用std::map的模板参数指定比较函数对象。例如:

struct MyCompare {
    bool operator()(const int& a, const int& b) const {
        return a > b;
    }
};
std::map<int, std::string, MyCompare> myMap;

这里创建的map将按照键的降序排列。

C++编程语言基础