📅  最后修改于: 2023-12-03 15:36:48.369000             🧑  作者: Mango
C++ 中的映射数据类型是一种将键和值配对的数据结构,也称为关联数组或字典。每个键在映射中只能出现一次,并映射到一个特定的值。C++ 中有多种实现映射的方式,其中一种常用的方式是使用 STL 的 map
。
map
是一个关联容器,将值(value)与钥匙(key)相关联。 map
保证元素按其键的顺序存储(以升序或字典顺序)。 map
具有以下特点:
map
中出现一次map
下面是 map
的定义:
template <
class Key,
class T,
class Compare = std::less<Key>,
class Allocator = std::allocator<std::pair<const Key, T>>
> class map;
其中,Key
类型是关键字(键)类型,T
是每个关键字对应的值类型。 Compare
是一个可选的比较函数对象,用于比较元素的顺序。 如果未提供比较器,则键类型 Key
必须支持 <
操作符。 Allocator
类型表示用于配置和释放底层存储的空间的分配器类型(默认情况下使用 std::allocator
)。
下面是 map
的基本用法示例。
#include <iostream>
#include <map>
int main() {
std::map<std::string, int> age; // 创建一个映射,键为字符串,值为整数
// 向 map 中插入元素
age["Mike"] = 40;
age["John"] = 35;
age["Sarah"] = 28;
// 访问 map 中的元素
std::cout << "Mike's age: " << age["Mike"] << std::endl;
// 查找 map 中的元素
if (age.find("John") != age.end()) {
std::cout << "John's age: " << age["John"] << std::endl;
}
// 删除 map 中指定键的元素
age.erase("Sarah");
// 使用迭代器遍历 map
std::cout << "All ages:" << std::endl;
for (auto itr = age.begin(); itr != age.end(); itr++) {
std::cout << itr->first << ": " << itr->second << std::endl;
}
return 0;
}
在某些情况下,我们可能需要自定义比较器来指定元素的排序方式。以下是一个自定义比较器示例,演示如何按字符串长度排序元素。
#include <iostream>
#include <map>
#include <string>
// 按字符串长度比较函数
class LengthCompare {
public:
bool operator() (const std::string& s1, const std::string& s2) const {
return s1.length() < s2.length();
}
};
int main() {
std::map<std::string, int, LengthCompare> age; // 使用自定义比较器
age["Mike"] = 40;
age["John"] = 35;
age["Sarah"] = 28;
std::cout << "By length:" << std::endl;
for (auto itr = age.begin(); itr != age.end(); itr++) {
std::cout << itr->first << ": " << itr->second << std::endl;
}
return 0;
}
使用 C++ 中的映射数据类型可以轻松地将键值对存储起来,以便后续使用。 C++ STL 中提供了 map
来实现映射数据类型,并且提供了许多内置函数和算法来帮助开发人员实现就地操作。开发人员也可以通过自定义比较器或分配器等方式来进一步扩展其功能。