首页 > C++教程 > STL(标准模板库)
阅读:3,358
C++ set,STL set详解
set 是关联容器的一种,是排序好的集合(元素已经进行了排序)。set 和 multiset 类似,它和 multiset 的差别在于 set 中不能有重复的元素。multiset 的成员函数 set 中也都有。
不能直接修改 set 容器中元素的值。因为元素被修改后,容器并不会自动重新调整顺序,于是容器的有序性就会被破坏,再在其上进行查找等操作就会得到错误的结果。因此,如果要修改 set 容器中某个元素的值,正确的做法是先删除该元素,再插入新元素。
使用 set 必须包含头文件 <set>。set 的定义如下:
由于不能有重复元素,所以 set 中插入单个元素的 insert 成员函数与 multiset 中的有所不同,其原型如下:
关联容器的 equal_range 成员函数的返回值也是 pair 模板类对象,其原型如下:
下面的程序演示了 set 的用法。
5 inserted
5 already exists
4,5
不能直接修改 set 容器中元素的值。因为元素被修改后,容器并不会自动重新调整顺序,于是容器的有序性就会被破坏,再在其上进行查找等操作就会得到错误的结果。因此,如果要修改 set 容器中某个元素的值,正确的做法是先删除该元素,再插入新元素。
使用 set 必须包含头文件 <set>。set 的定义如下:
template < class Key, class Pred = less<Key>, class A = allocator<Key> > class set {...}
由于不能有重复元素,所以 set 中插入单个元素的 insert 成员函数与 multiset 中的有所不同,其原型如下:
pair<iterator, bool> insert(const T & val);
如果 set 的 insert 成员函数的返回值是 pair 模板类对象 x,如果 x.second 为 true,则说明插入成功,此时 x.first 就是指向被插入元素的迭代器;如果 x.second 为 false,则说明要插入的元素已在容器中,此时 x.first 就是指向原有那个元素的迭代器。关联容器的 equal_range 成员函数的返回值也是 pair 模板类对象,其原型如下:
pair<iterator, iterator> equal_range(const T & val);
返回值对象中的 first 就是 lower_bound 的值,second 就是 upper_bound 的值。下面的程序演示了 set 的用法。
#include <iostream> #include <set> //使用set须包含此文件 using namespace std; int main() { typedef set<int>::iterator IT; int a[5] = { 3,4,6,1,2 }; set<int> st(a,a+5); // st里是 1 2 3 4 6 pair< IT,bool> result; result = st.insert(5); // st变成 1 2 3 4 5 6 if(result.second) //插入成功则输出被插入元素 cout << * result.first << " inserted" << endl; //输出: 5 inserted if(st.insert(5).second) cout << * result.first << endl; else cout << * result.first << " already exists" << endl; //输出 5 already exists pair<IT,IT> bounds = st.equal_range(4); cout << * bounds.first << "," << * bounds.second ; //输出:4,5 return 0; }程序的输出结果是:
5 inserted
5 already exists
4,5
所有教程
- socket
- Python基础教程
- C#教程
- MySQL函数
- MySQL
- C语言入门
- C语言专题
- C语言编译器
- C语言编程实例
- GCC编译器
- 数据结构
- C语言项目案例
- C++教程
- OpenCV
- Qt教程
- Unity 3D教程
- UE4
- STL
- Redis
- Android教程
- JavaScript
- PHP
- Mybatis
- Spring Cloud
- Maven
- vi命令
- Spring Boot
- Spring MVC
- Hibernate
- Linux
- Linux命令
- Shell脚本
- Java教程
- 设计模式
- Spring
- Servlet
- Struts2
- Java Swing
- JSP教程
- CSS教程
- TensorFlow
- 区块链
- Go语言教程
- Docker
- 编程笔记
- 资源下载
- 关于我们
- 汇编语言
- 大数据
- 云计算
- VIP视频