map容器怎么存储复合类型的元素
时间: 2024-05-12 21:12:55 浏览: 15
在 C++ 中,可以使用自定义类型作为 map 容器的元素类型。为了让 map 容器能够正确地存储自定义类型的元素,需要满足以下两个条件:
1. 自定义类型需要定义小于运算符(operator<)
map 容器默认使用元素类型的小于运算符进行排序和查找。如果自定义类型没有小于运算符,编译器将无法进行排序和查找操作。
2. 自定义类型需要定义默认构造函数
map 容器在创建元素时需要调用元素类型的默认构造函数,如果自定义类型没有默认构造函数,编译器将无法创建元素。
以下是一个存储自定义类型的 map 容器的示例代码:
```cpp
#include <iostream>
#include <map>
#include <string>
struct Person {
std::string name;
int age;
bool operator<(const Person& other) const {
return name < other.name;
}
Person() {}
Person(std::string _name, int _age): name(_name), age(_age) {}
};
int main() {
std::map<Person, int> ageMap;
ageMap.emplace(Person("Alice", 25), 25);
ageMap.emplace(Person("Bob", 30), 30);
ageMap.emplace(Person("Charlie", 20), 20);
for (const auto& [person, age] : ageMap) {
std::cout << person.name << ": " << age << std::endl;
}
return 0;
}
```
在上面的示例代码中,我们定义了一个名为 Person 的自定义类型,然后使用 Person 作为 map 容器的元素类型。Person 定义了小于运算符和默认构造函数,因此可以在 map 容器中正确地存储元素。