目录
一、介绍
简单的说:set<int>
用于存储一组唯一且有序的整数值
详细的说:set<int>
是 C++ 标准库中的容器,它表示一种集合(Set)数据结构,用于存储一组唯一且有序的整数值。在一个 set
中,每个元素都是唯一的,而且它们是按照一定的顺序进行排列的。当你将一个元素插入到 set
中时,如果该元素已经存在,则插入操作会被忽略,因为 set
中不允许存在重复的元素。这使得 set
成为一个非常有用的工具,用来管理一组唯一的数据,并且可以自动帮你去除重复项。
除了插入元素,set
还支持查找、删除和遍历等操作,而且这些操作的时间复杂度通常是较低的,对于维护一组唯一值非常高效。
二、使用
头文件
#include <set>
#include<bits/stdc++.h>也是包含的
例子
(1)定义
#include<iostream>
#include<bits/stdc++.h>
using namespace std;
int main()
{
set<int> myset;
return 0;
}
(2)添加元素
mySet = {4, 1, 3, 2, 5};
(3)insert插入元素
myset.insert
是 C++ 中 std::set
容器提供的成员函数,用于向 set 容器中插入新的元素。具体来说,insert
函数会将一个新的元素插入到 set 中,并且确保集合中不包含重复的元素。
当调用 myset.insert(value)
时,如果 value
在 set 中已经存在,则插入操作会被忽略,因为 set 中不能包含重复的元素。如果 value
是一个新的元素,它将被插入到 set 中,并且 set 会自动维持元素的有序性。
这个函数返回一个 std::pair
对象,其中的第一个成员是一个迭代器,指向插入的位置,第二个成员是一个布尔值,表示插入是否成功。通常情况下,可以忽略 insert
返回的值,因为主要关心插入操作是否成功。
(4)遍历
#include <iostream>
#include <set>
int main() {
std::set<int> mySet = {4, 1, 3, 2, 5};
// 使用迭代器遍历 set
for (auto it = mySet.begin(); it != mySet.end(); ++it) {
std::cout << *it << " ";
}
std::cout << std::endl;
return 0;
}
(5)查找
#include <iostream>
#include <set>
int main() {
std::set<int> mySet = {1, 2, 3, 4, 5};
// 查找元素是否存在
int elementToFind = 3;
auto it = mySet.find(elementToFind);
if (it != mySet.end()) {
std::cout << "元素 " << elementToFind << " 存在于 set 中" << std::endl;
} else {
std::cout << "元素 " << elementToFind << " 不存在于 set 中" << std::endl;
}
return 0;
}
三、参数
集合s的长度:s.size();
集合s开始的地址:s.begin();
集合s结束的地址:s.end()。
基本操作:
定义集合s:set<int>s;
定义集合数组s[N]:set<int>s[N];
在集合s中查找元素i:s.find(i),返回i的地址,且*s.find(i)==i;若s中不含i,则s.find(i)==s.end(),这即是说,你可以利用s.find(i)!=s.end()判断元素是否在集合内;
其它操作:
清除s的所有元素:s.clear();
检查集合是否为空:s.empty()==true,集合为空;
删除集合中地址为it的元素:s.erase(it)。
四、迭代器
#include <iostream>
#include <set>
int main() {
std::set<int> mySet = {4, 1, 3, 2, 5};
std::set<int>::iterator it = mySet.begin();
std::advance(it, 2); // 将迭代器移动到第三个元素位置
// 输出第三个元素
std::cout << "第三个元素是: " << *it << std::endl;
return 0;
}
在 C++ 中,可以通过迭代器来访问 std::set
中的元素。你可以定义一个迭代器来遍历 set 中的元素,然后使用迭代器来访问特定位置的元素。
定义了一个迭代器 it
,并将其初始化为 mySet
的起始位置(即第一个元素)。然后,使用 std::advance
函数将迭代器移动到第三个元素的位置。最后,通过解引用迭代器 *it
来获取第三个元素的值并输出。
通过使用迭代器,你可以方便地访问 std::set
中的任意位置的元素。
问题:什么是迭代器
迭代器(Iterator)是一种抽象的数据访问工具,它允许你在容器(如数组、列表、集合等)中按顺序访问元素,而无需了解容器的内部实现细节。迭代器提供了一种统一的方式来遍历和操作容器中的元素,使得代码更加灵活和可复用。
迭代器通常具有以下几个基本操作:
- 解引用 (Dereferencing):迭代器可以通过解引用操作符 `*` 来获取当前位置的元素值。
- 自增 (Incrementing):迭代器可以通过自增操作符 `++` 移动到容器中的下一个元素位置。
- 比较 (Comparing):迭代器可以通过比较操作符 `==` 和 `!=` 来进行相等性比较,判断两个迭代器是否指向同一个位置。
通过使用迭代器,你可以遍历容器中的每个元素,并对其进行读取或修改。这样,你不需要关心容器的内部实现方式,只需要使用迭代器提供的接口来操作元素即可。
在C++中,不同类型的容器提供了不同类型的迭代器。例如,`std::vector` 提供了随机访问迭代器,`std::list` 提供了双向迭代器,`std::set` 提供了双向迭代器等。每种容器都定义了适合自身特性的迭代器类型。
通过迭代器,你可以灵活地操作容器中的元素,实现各种需求,如查找特定元素、插入或删除元素、遍历元素并进行处理等。迭代器是 C++ 标准库中非常重要和强大的一个概念。
博文推荐:http://t.csdnimg.cn/nXmt3
五、推广
std::set
容器在 C++ 中可以存储任何可比较的数据类型,不仅限于 int
类型。你可以存储诸如 char
、double
、string
、自定义结构体、甚至自定义类对象等类型的数据。
#include <iostream>
#include <set>
#include <string>
int main() {
std::set<std::string> stringSet = {"apple", "banana", "orange", "apple"};
// 遍历 set 中的字符串
for (const auto& str : stringSet) {
std::cout << str << " ";
}
std::cout << std::endl;
return 0;
}
在这个示例中创建了一个 std::set<std::string>
的实例 stringSet
,并存储了一些字符串。然后使用范围-based for 循环遍历并输出 stringSet
中的所有字符串。