1. Set和multiset是C++标准库中的关联容器,它们存储的是键值对,其中键是唯一的,而值则可以相同也可以不同。
2. 在set中,所有的键值对必须具有相同的键。例如,给定两组键值对,第一组中键值对的键和值不同,而第二组中键值对的键和值相同。set仅能存储第二组键值对,无法存储第一组。
3. 由于set仅存储键,而非键值对,因此向set中插入数据时,只需提供键。比如,要存储第二组键值对,只需提供字符串{"a", "b", "c"},set会自动存储这些键。
4. Set容器默认根据键的自然顺序对元素进行排序。由于每个键值对的键是唯一的,因此排序实际上是对键值进行的。
5. Set容器的相关函数定义在``头文件中,属于std命名空间。使用set前,需包含该头文件,并使用std命名空间。
6. Set的类模板定义如下:
```cpp
template <class T, class Compare = less, class Allocator = allocator >
class set;
```
其中,T为键和值的类型,Compare为比较函数,用于元素排序,Allocator用于内存分配。
7. Set提供大小和判空函数,用于检查容器中元素的数量和是否为空。
8. 以下是一个简单的集合类实现,以及使用学生类Student进行的测试。该集合类派生自set,并实现了并、交、差三种操作:
```cpp
#include
#include
#include
#include
class Student {
std::string name;
int age;
public:
Student(const std::string& name, int age) : name(name), age(age) {}
bool operator<(const Student& other) const {
return name < other.name || (name == other.name && age < other.age);
}
};
class MySet : public std::set {
// 派生类中重载比较操作符,实现自定义排序
};
int main() {
MySet students;
// 添加雇员功能、显示功能等...
return 0;
}
```
9. 假设公司雇员的信息包括姓名和部门名称。可以创建一个管理雇员的集合类,该类应包括添加雇员和显示雇员信息的功能,并要求显示时先按部门名称升序,同名部门再按姓名升序排列。
下载本文