C++ STL 有关于SET集合部分 的自定义数据类型的排序 以及 pair的使用

本文详细介绍了C++ STL中SET集合的使用,包括自定义数据类型的排序和pair的运用。通过示例展示了如何进行SET的初始化、删除操作,以及如何根据less<>和greater<>进行从小到大和从大到小的排序。同时,文章讲解了如何为自定义类型定义仿函数进行排序,并利用insert()返回的pair判断插入操作是否成功。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include<iostream>
using namespace std;
#include"set"  //set集合容器的头文件
#include<functional>  //用于识别set从大到小中greater的识别
/*知识点集合*/

//1 set为容器 元素唯一(如果插入多个重复元素就会出现只有一个元素被插入) 自动排序(默认情况下 从小到大) 不可以按照[](数组形式)方式插入元素
//理论基础是 红黑树  平衡二叉树
// 在less<> 与 greater<> 为库中提前预定好的函数对象
//在学习的时候 一定要注意如果出现对某个函数有疑问 一定要学会对该函数的源码追踪


//set 的基本操作  初始化以及删除操作
void main91()
{
	set<int>  s1;

	cout << "set的长度" << s1.size() << endl;


	//首先插入五个随机数
	for (int i = 0; i < 5; i++)
	{
		int temp = rand();   //随机数
		s1.insert(temp);  //set的插入
	}

	cout << "set的长度" << s1.size() << endl;
	set<int>::iterator it = s1.begin();
	cout << "set的初始化" << endl;
	while (it != s1.end())
	{
		cout << *it << " ";
		it++;
	}
	cout << endl;

	//在插入三个相同的数  验证是否会保证元素的唯一性

	s1.insert(10);
	s1.insert(10);
	s1.insert(10);

	cout << "set的插入相同元素之后" << endl;
	it = s1.begin();

	while (it != s1.end())
	{
		co
### C++ STL 中 `map` 和 `set` 的使用方法 #### 1. 关于 `map` `map` 是一种关联容器,用于存储具有唯一键值的键值对。它基于红黑树实现,因此提供了高效的查找、插入和删除操作。 以下是 `map` 常见的操作及其功能: - **插入数据** 使用 `insert()` 方法可以向 `map` 容器中插入新的键值对[^1]。 ```cpp std::map<std::string, int> myMap; myMap.insert(std::make_pair("apple", 10)); ``` - **访问元素** 可以通过下标运算符 `[key]` 或者 `at(key)` 来获取指定键对应的值。如果键不存在,则会自动创建一个新的键值对并初始化其值为默认值。 ```cpp int value = myMap["banana"]; // 如果 "banana" 不在 map 中,则会被添加进去,默认值为 0 ``` - **遍历 `map`** 遍历可以通过范围循环或者迭代器完成[^2]。 ```cpp for (const auto& kv : myMap) { std::cout << kv.first << ": " << kv.second << std::endl; } ``` - **删除元素** 删除特定键的元素可使用 `erase()` 函数[^5]。 ```cpp myMap.erase("apple"); ``` #### 2. 关于 `set` `set` 同样是一种关联容器,但它仅存储唯一的键而无对应的值。同样基于红黑树实现,支持快速查找、插入和删除操作。 以下是 `set` 的常见用法: - **插入数据** 插入新元素可以直接调用 `insert()` 方法[^4]。 ```cpp std::set<int> mySet; mySet.insert(1); mySet.insert(2); ``` - **查找元素** 查找某个元素是否存在可通过 `find()` 实现。如果找到则返回指向该元素的迭代器;否则返回 `end()` 迭代器。 ```cpp if (mySet.find(2) != mySet.end()) { std::cout << "Element found!" << std::endl; } ``` - **删除元素** 类似于 `map`,也可以利用 `erase()` 移除指定元素。 ```cpp mySet.erase(1); ``` - **遍历 `set`** 遍历方式与 `map` 类似,既可以采用范围循环也可借助迭代器。 ```cpp for (const auto& elem : mySet) { std::cout << elem << std::endl; } ``` #### 示例代码 下面是一个综合示例展示如何使用 `map` 和 `set`: ```cpp #include <iostream> #include <map> #include <set> int main() { // Map example std::map<std::string, int> wordCount; std::string words[] = {"hello", "world", "hello", "c++"}; for (const auto& word : words) { ++wordCount[word]; } for (const auto& entry : wordCount) { std::cout << entry.first << ": " << entry.second << "\n"; } // Set example std::set<int> uniqueNumbers; int numbers[] = {3, 1, 4, 1, 5, 9}; for (const auto& num : numbers) { uniqueNumbers.insert(num); } for (const auto& number : uniqueNumbers) { std::cout << number << " "; } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值