C++ 中的 set
是一种关联容器,它包含一组唯一的对象
-
插入元素:使用
insert()
成员函数将元素插入到集合中。例如:std::set
my_set; my_set.insert(5); my_set.insert(3); my_set.insert(7); -
删除元素:使用
erase()
成员函数从集合中删除元素。例如:my_set.erase(3); // 删除元素 3
-
查找元素:使用
find()
成员函数查找集合中的元素。如果找到该元素,则返回指向它的迭代器;否则返回指向set::end
的迭代器。例如:auto it = my_set.find(5); if (it != my_set.end()) { // 找到了元素 5 }
-
检查元素是否存在:使用
count()
成员函数检查集合中是否存在指定元素。返回值为 1 表示存在,返回值为 0 表示不存在。例如:if (my_set.count(5) == 1) { // 集合中包含元素 5 }
-
遍历集合:使用范围 for 循环或迭代器遍历集合中的元素。例如:
// 使用范围 for 循环 for (const auto& elem : my_set) { std::cout << elem << " "; } std::cout << std::endl; // 使用迭代器 for (auto it = my_set.begin(); it != my_set.end(); ++it) { std::cout << *it << " "; } std::cout << std::endl;
-
访问集合中的元素:由于
set
中的元素是无序的,因此不能直接通过索引访问元素。但是可以使用迭代器访问集合中的元素。例如:auto it = my_set.begin(); std::advance(it, 1); // 移动到第二个元素(值为 7) std::cout << *it << std::endl; // 输出 7
-
自定义比较函数:默认情况下,
set
使用std::less
作为比较函数,它按照升序比较元素。如果需要自定义比较函数,可以将比较函数对象传递给set
的模板参数。例如:struct MyCompare { bool operator()(int a, int b) const { return a > b; // 降序比较 } }; std::set
my_set_desc(MyCompare()); my_set_desc.insert(5); my_set_desc.insert(3); my_set_desc.insert(7); -
集合操作:
set
还提供了一些其他有用的操作,如lower_bound()
、upper_bound()
和equal_range()
等。这些操作可以帮助您更有效地处理集合中的元素。例如:auto lower = my_set.lower_bound(5); // 返回指向第一个大于等于 5 的元素的迭代器 auto upper = my_set.upper_bound(5); // 返回指向第一个大于 5 的元素的迭代器 auto range = my_set.equal_range(5); // 返回一个包含两个迭代器的范围,分别指向第一个等于 5 的元素和第一个大于 5 的元素