📜  在C++标准模板库(STL)中映射(1)

📅  最后修改于: 2023-12-03 15:37:34.991000             🧑  作者: Mango

在C++标准模板库(STL)中映射

在C++中,映射数据结构是通过STL中的map类来实现的。映射是一种通过键/值对来存储和访问元素的数据结构。每个元素都由一个唯一的键来标识,并且可以通过键来访问其相应的值。

创建映射

要创建一个映射,需要使用map类,并指定键和值的类型。例如,下面创建了一个从字符串到整数的映射:

#include <map>
#include <string>

std::map<std::string, int> myMap;
插入和访问元素

可以使用insert方法向映射中插入元素,该方法需要一个std::pair对象,其中第一个元素是键,第二个元素是值。例如,我们可以添加一个键为“apple”,值为20的元素:

myMap.insert(std::make_pair("apple", 20));

可以使用下标运算符[]来访问映射中的元素。例如,下面的代码将返回键为“apple”的值:

int value = myMap["apple"];

如果要访问映射中不存在的键,则会在访问时自动创建一个新元素。例如,下面的代码将将创建一个新的键/值对 "banana"/0

int value = myMap["banana"];

可以使用at方法来访问映射中的元素,这种方法比使用下标运算符更安全,因为如果指定的键在映射中不存在,则会抛出一个std::out_of_range异常。例如,下面的代码将在键为“apple”不存在时引发异常:

int value = myMap.at("apple");
迭代访问映射

可以使用beginend方法来迭代遍历映射中的元素。例如,以下代码将遍历整个映射,并将每个键和值打印到控制台:

for (auto itr = myMap.begin(); itr != myMap.end(); ++itr) {
    std::cout << itr->first << ": " << itr->second << std::endl;
}
查找元素

可以使用find方法查找映射中的元素,并返回指向该元素的迭代器。如果指定的键不存在,则方法将返回end()迭代器。例如,下面的代码将查找键为“apple”的元素,并将其值存储在value变量中:

auto itr = myMap.find("apple");
if (itr != myMap.end()) {
    int value = itr->second;
}
删除元素

可以使用erase方法从映射中删除元素,该方法需要指定要删除的键。例如,下面的代码将删除键为“apple”的元素:

myMap.erase("apple");

可以使用clear方法从映射中删除所有元素:

myMap.clear();

总结

通过map类实现的映射数据结构提供了一种将键和值关联起来的方法。它可以方便地插入、访问、迭代、查找和删除元素。如果需要将元素按键排序,则可以使用std::mapstd::multimap类。如果需要支持无序映射,则可以使用std::unordered_mapstd::unordered_multimap类。