📜  C++ STL 中的 set 与 unordered_set(1)

📅  最后修改于: 2023-12-03 15:29:49.969000             🧑  作者: Mango

C++ STL 中的 set 与 unordered_set

Set

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 也是一种关联容器,但是它使用哈希表来存储元素,因此元素没有按顺序排列,而是根据元素的哈希值快速查找和存储。

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 是用哈希表实现的,元素没有顺序。在选择用哪个容器时,需要根据实际需求来做选择。