📅  最后修改于: 2023-12-03 15:29:49.969000             🧑  作者: Mango
Set 是一种基于红黑树实现的关联容器,其特点是元素按照一定的顺序排列,且每个元素值只能出现一次。
Set 容器的底层使用红黑树实现,因此每个元素都具有唯一的键值。Set 的基本操作包括增加元素、删除元素、查找元素、遍历元素等。
Set 容器的定义和初始化示例:
#include <set>
// 使用 set 容器
std::set<int> mySet;
// 初始化 set 容器
std::set<int> mySet{1,2,3,4,5};
添加元素的示例:
// 使用 insert() 添加元素
mySet.insert(10);
// 使用 emplace() 添加元素
mySet.emplace(15);
删除元素的示例:
// 使用 erase() 删除元素
mySet.erase(10);
// 删除 set 容器中第一个元素
mySet.erase(mySet.begin());
查找元素的示例:
// 使用 find() 查找元素
auto itr = mySet.find(5);
if (itr != mySet.end()) {
std::cout << "元素 5 存在于 set 容器中\n";
} else {
std::cout << "元素 5 不存在于 set 容器中\n";
}
Unordered Set 也是一种关联容器,但是它使用哈希表来存储元素,因此元素没有按顺序排列,而是根据元素的哈希值快速查找和存储。
Unordered Set 容器的定义和初始化示例:
#include <unordered_set>
// 使用 unordered_set 容器
std::unordered_set<int> myUnorderedSet;
// 初始化 unordered_set 容器
std::unordered_set<int> myUnorderedSet{1,2,3,4,5};
添加元素的示例:
// 使用 insert() 添加元素
myUnorderedSet.insert(10);
// 使用 emplace() 添加元素
myUnorderedSet.emplace(15);
删除元素的示例:
// 使用 erase() 删除元素
myUnorderedSet.erase(10);
// 删除 set 容器中第一个元素
myUnorderedSet.erase(myUnorderedSet.begin());
查找元素的示例:
// 使用 find() 查找元素
auto itr = myUnorderedSet.find(5);
if (itr != myUnorderedSet.end()) {
std::cout << "元素 5 存在于 unordered_set 容器中\n";
} else {
std::cout << "元素 5 不存在于 unordered_set 容器中\n";
}
Set 和 unordered_set 都是 C++ STL 中的关联容器,它们的基本操作和用法非常相似,只是底层实现不同。Set 是用红黑树实现的,元素按顺序排列,而 unordered_set 是用哈希表实现的,元素没有顺序。在选择用哪个容器时,需要根据实际需求来做选择。