【C++ 语言】容器 ( queue 队列 | stack 栈 | priority_queue 优先级队列 | set 集合 | 容器遍历 | map )(二)

简介: 【C++ 语言】容器 ( queue 队列 | stack 栈 | priority_queue 优先级队列 | set 集合 | 容器遍历 | map )(二)

1. 定义自定义类型 : 内部定义 age 成员变量 , 构造函数中设置该变量值 ;


//自定义容器
class Student {
public :
  int age; 
  //声明构造方法 , 后面的 : age(age) 
  //  左侧的 age 表示给 age 成员赋值 , 右边的表示参数中的 age 值
  Student(int age) : age(age){}
};


2. 自定义类型的排序方法定义 : 按照官方的定义方式定义排序方法 , 这里省略的模板方法相关内容 , 因为比较的就是 Student 类型对象 , 这里按照其 age 成员变量的大小进行比较 , age 成员变量最大的放在队首 ;


// Student 类对象排序方法定义
//  排序方式 : 左侧对象的 age 成员变量 , 大于右侧对象的 age 成员变量
struct StudentLess { 
  constexpr bool operator()(const Student& _Left, const Student& _Right) const { 
  return _Left.age < _Right.age;
  }
};


3. 声明自定义类型容器队列 :


( 1 ) 必须制定排序方法 : 注意此处必须指定 Student 对象之间的排序方式 , 否则编译时会报错 , 可以参考 less 和 greater 的实现 ;

( 2 ) 自定义的排序方法 : StudentLess , 其会将 Student 对象的 age 成员变量大的排在前面 ;

//自定义类型容器队列
  //  注意此处必须指定 Student 对象之间的排序方式 , 否则编译时会报错 
  //  可以参考 less 和 greater 的实现
  //自定义的排序方法 : StudentLess , 其会将 Student 对象的 age 成员变量大的排在前面
  priority_queue< Student, vector<Student>, StudentLess > pq_student;


4. 加入 Student 对象 : 使用构造方法创建 Student 对象 , 并将对象放入队列中 , 打印出队首元素 ;


//向自定义类型容器队列中加入 3 个对象 , 使用构造函数生成对象
  pq_student.push(Student(8));
  pq_student.push(Student(18));
  pq_student.push(Student(15));
  cout << "打印 pq_student 优先级队列的首元素 : pq_student.top().age : " << pq_student.top().age << endl;


5. 执行结果 :


打印 pq_student 优先级队列的首元素 : pq_student.top().age : 18




关联式容器


关联式容器操作 : 关联式容器的操作 , 与序列式容器调用方法基本一致 ;


关联式容器访问方式 : 通过关键字保存和访问元素 , 如 Java 中的 Map , Set ;




set 集合


1. Set 集合 : 内部是由红黑树实现的 , 每个节点都是一个元素 , 其元素不可重复 ;


2. 包含头文件 :


//引入 set 集合的头文件
#include <set>


3. 声明 set 集合 :


set<int> set_1 = {8 , 888 , 8888};


4. 插入元素 : 注意 set 集合中元素不能重复 , 如果插入重复的元素该操作是无效的 ;


//插入 18 , 集合中没有元素 18 , 此时插入成功
  set_1.insert(18);
  //插入 888 , 此时之前已经有了 888 元素 , set 集合不允许重复 , 本次插入失败
  set_1.insert(888);


5. 插入解析 : 上面的两个操作中 , 集合中已经有了 888 元素 , 再次插入 888 元素 , 该操作是无效的 ;


6. 插入返回值解析 : insert 返回值是一个键值对 , 返回值类型 : pair<iterator, bool> ;


( 1 ) 具体的返回值类型 : pair<set::iterator, bool> ;

( 2 ) 其键是一个迭代器 ;

( 3 ) 值是 bool 类型 , 如果插入成功值为 true , 否则为 false ;

7. 删除元素 : 删除一个元素 , 其大小发生了改变 ;


//删除某个元素
  set_1.erase(888); 
  //打印容器大小
  cout << "打印 set_1 删除 888 容量大小 : set_1.size() : " << set_1.size() << endl;


8. 代码示例 :


// VI . set 集合
  //  Set : 集合 , 内部是由红黑树实现的 , 每个节点都是一个元素 , 其元素不可重复
  set<int> set_1 = {8 , 888 , 8888};
  //插入 18 , 集合中没有元素 18 , 此时插入成功
  set_1.insert(18);
  //插入 888 , 此时之前已经有了 888 元素 , set 集合不允许重复 , 本次插入失败
  set_1.insert(888);
  //insert 返回值是一个键值对 , 其键是一个迭代器 ,
  //  值是 bool 类型 , 如果插入成功值为 true , 否则为 false
  //  返回值类型 : pair<iterator, bool>
  //  具体的返回值类型 : pair<set<int>::iterator, bool>
  //删除某个元素
  set_1.erase(888); 
  //打印容器大小
  cout << "打印 set_1 删除 888 容量大小 : set_1.size() : " << set_1.size() << endl;


9. 执行结果 :


打印 set_1 删除 888 容量大小 : set_1.size() : 3


目录
相关文章
|
9月前
|
存储 JavaScript Java
(Python基础)新时代语言!一起学习Python吧!(四):dict字典和set类型;切片类型、列表生成式;map和reduce迭代器;filter过滤函数、sorted排序函数;lambda函数
dict字典 Python内置了字典:dict的支持,dict全称dictionary,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度。 我们可以通过声明JS对象一样的方式声明dict
499 2
|
安全 Java 数据库连接
让我们讲解一下 Map 集合遍历的方式
我是小假 期待与你的下一次相遇 ~
421 43
|
C++ 容器
【c++丨STL】stack和queue的使用及模拟实现
本文介绍了STL中的两个重要容器适配器:栈(stack)和队列(queue)。容器适配器是在已有容器基础上添加新特性或功能的结构,如栈基于顺序表或链表限制操作实现。文章详细讲解了stack和queue的主要成员函数(empty、size、top/front/back、push/pop、swap),并提供了使用示例和模拟实现代码。通过这些内容,读者可以更好地理解这两种数据结构的工作原理及其实现方法。最后,作者鼓励读者点赞支持。 总结:本文深入浅出地讲解了STL中stack和queue的使用方法及其模拟实现,帮助读者掌握这两种容器适配器的特性和应用场景。
454 21
|
设计模式 C++ 容器
c++中的Stack与Queue
c++中的Stack与Queue
|
存储 缓存 安全
Go 语言中的 Sync.Map 详解:并发安全的 Map 实现
`sync.Map` 是 Go 语言中用于并发安全操作的 Map 实现,适用于读多写少的场景。它通过两个底层 Map(`read` 和 `dirty`)实现读写分离,提供高效的读性能。主要方法包括 `Store`、`Load`、`Delete` 等。在大量写入时性能可能下降,需谨慎选择使用场景。
|
存储 安全 Go
Go语言中的map数据结构是如何实现的?
Go 语言中的 `map` 是基于哈希表实现的键值对数据结构,支持快速查找、插入和删除操作。其原理涉及哈希函数、桶(Bucket)、动态扩容和哈希冲突处理等关键机制,平均时间复杂度为 O(1)。为了确保线程安全,Go 提供了 `sync.Map` 类型,通过分段锁实现并发访问的安全性。示例代码展示了如何使用自定义结构体和切片模拟 `map` 功能,以及如何使用 `sync.Map` 进行线程安全的操作。
594 9
go语言for遍历映射(map)
go语言for遍历映射(map)
617 12
|
存储 Go
go语言 遍历映射(map)
go语言 遍历映射(map)
479 2
|
存储 前端开发 API
ES6的Set和Map你都知道吗?一文了解集合和字典在前端中的应用
该文章详细介绍了ES6中Set和Map数据结构的特性和使用方法,并探讨了它们在前端开发中的具体应用,包括如何利用这些数据结构来解决常见的编程问题。
ES6的Set和Map你都知道吗?一文了解集合和字典在前端中的应用