C++学习第二十一课:STL集合类的深入探索

在这里插入图片描述

C++学习第二十一课:STL集合类的深入探索

STL集合类在C++中扮演着重要的角色,它们提供了一组固定大小的容器,其中的元素按照特定的顺序进行组织。本课将详细介绍STL中的集合类,包括std::setstd::mapstd::multisetstd::multimap,并探讨它们的用法和示例代码。

1. 集合类概述

STL中的集合类提供了一组不允许重复元素的容器,它们基于平衡二叉树实现。

示例代码
#include <set>

std::set<int> mySet = {1, 2, 3, 2}; // 集合中的2只会出现一次

2. 初始化集合

可以初始化集合类容器,包括从数组、迭代器范围或另一个容器拷贝。

示例代码
int arr[] = {1, 2, 3, 4, 5};
std::set<int> mySet(arr, arr + 5); // 从数组初始化

3. 访问和修改元素

集合类容器不允许直接访问元素,但可以使用迭代器进行遍历。

示例代码
for (int num : mySet) {
    std::cout << num << " ";
}

4. 添加和移除元素

可以使用inserterase函数来添加和移除元素。

示例代码
mySet.insert(4); // 添加一个元素
auto it = mySet.find(2);
if (it != mySet.end()) {
    mySet.erase(it); // 移除一个元素
}

5. 集合的操作

集合类提供了如countlower_boundupper_bound等操作。

示例代码
if (mySet.count(3)) {
    std::cout << "3 is in the set" << std::endl;
}

6. 集合比较

集合类支持比较运算符,可以比较两个集合是否相等。

示例代码
std::set<int> anotherSet = {1, 2, 3};
if (mySet == anotherSet) {
    std::cout << "Sets are equal" << std::endl;
}

7. 集合的集合操作

STL提供了集合的并集、交集、差集等操作。

示例代码
std::set<int> unionSet(mySet);
std::set_union(mySet.begin(), mySet.end(), anotherSet.begin(), anotherSet.end(), std::inserter(unionSet, unionSet.end()));

8. std::map

std::map是一个关联容器,它存储键值对,并且每一键只能出现一次。

示例代码
#include <map>

std::map<int, std::string> myMap;
myMap[1] = "one";
myMap[2] = "two";

9. std::multisetstd::multimap

std::setstd::map类似,但允许键的重复。

示例代码
#include <multiset>

std::multiset<int> myMultiSet = {{1, 2}, {2, 3}, {2, 5}};

10. 迭代器和反向迭代器

集合类容器支持迭代器和反向迭代器。

示例代码
for (auto it = mySet.rbegin(); it != mySet.rend(); ++it) {
    std::cout << *it << " ";
}

结语

通过本课的学习,你深入了解了STL中的集合类容器,包括std::setstd::mapstd::multisetstd::multimap,以及它们的初始化、元素访问、添加和移除元素、集合操作、迭代器使用、内存管理、异常安全性、实际应用、线程安全性和性能考量。

集合类容器是C++中处理集合和关联容器的强大工具,它们在需要避免元素重复的场景下非常有用。掌握集合类容器的使用对于编写高效、安全、可维护的C++程序至关重要。

  • 17
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值