青少年编程知识记录 codecoming

STL入门——容器2:set

一、简单介绍

    

  • set是STL中一个很有用的容器,用来存储同一种数据类型的数据结构(可以称之为K的模型),基本功能与数组相似。

  • set与数组不同的是,在set中每个元素的值都是唯一的。

  • 而且set插入数据时,能够根据元素的值自动进行排序。

  • set中数元素的值并不能直接被改变。



二、set底层

(1)set的底层是红黑树,是红黑树里面K的模型;

K模型:表示只能存放同一种数据类型

KV模型:表示能存放两种数据类型

(2)map的底层也是红黑树,而它是KV模型。

(3)set不允许插入重复数据,而multiset允许插入相同的数据。

三、set常用方法

begin();  	//返回set容器的第一个元素  end();  	//返回set容器的最后一个元素  clear();  	//删除set容器中的所有的元素  empty();  	//判断set容器是否为空  max_size();    //返回set容器  size(); 	//返回当前set容器中的元素个数  rbegin();   //返回的值和end()相同  rend();     //返回的值和rbegin() 相同

四、定义及使用

使用set的头文件是 #include<set>

#include<set>

定义:

set<int> a; // 定义一个int类型的集合a  set<int> b(a); // 定义并用集合a初始化集合b  set<int> b(a.begin(), a.end()); // 将集合a中的所有元素作为集合b的初始值

数据录入的方式通过for循环:

#include<iostream>  #include<set>  using namespace std;  int main(){  	set<int> ss;  	//可以通过下面的方式进行输入   	for(int i=0;i<5;i++){  		ss.insert(i);  		//或者像下面这样   	//	int x;  	//	cin>>x;  	//	ss.insert(x);   	}  }

数据的输出有点麻烦,需要一点指针的知识

#include<iostream>  #include<set>  using namespace std;  int main(){  	set<int> ss;  	//可以通过下面的方式进行输入   	for(int i=0;i<5;i++){  		ss.insert(i);  		//或者像下面这样   	//	int x;  	//	cin>>x;  	//	ss.insert(x);   	}  	//数据输出  	set<int>::iterator it = ss.begin();  	for(it =ss.begin(); it!=ss.end();it++){  		cout<<*it<<" ";// 输出  0 1 2 3 4   	}   	cout<<endl;  	return 0;   }

五、其他函数的使用

1.大小、容量、个数

#include<iostream>  #include<set>  using namespace std;  int main(){  	set<int> ss;  	//可以通过下面的方式进行输入   	for(int i=0;i<5;i++){  		ss.insert(i);  		//或者像下面这样   	//	int x;  	//	cin>>x;  	//	ss.insert(x);   	}  	cout << ss.size() << endl; // 输出:5  	cout << ss.max_size() << endl; // 输出:461168601842738790  	cout << ss.count(2) << endl; // 输出:1  	return 0;   }



2、删除函数

#include<iostream>  #include<set>  using namespace std;  int main(){  	set<int> ss;  	//可以通过下面的方式进行输入   	for(int i=0;i<5;i++){  		ss.insert(i);  		//或者像下面这样   	//	int x;  	//	cin>>x;  	//	ss.insert(x);   	}  	ss.erase(4); // 删除容器中值为elem的元素  	set<int>::iterator it = ss.begin();  	ss.erase(it);  	ss.erase(st.begin(), ++st.begin()); 	// 删除[first,last]之间的元素  	ss.clear(); //清空所有元素  	return 0;   }

3、访问与查找

#include<iostream>  #include<set>  using namespace std;  int main(){  	set<int> ss;  	//可以通过下面的方式进行输入   	for(int i=0;i<5;i++){  		ss.insert(i);  		//或者像下面这样   	//	int x;  	//	cin>>x;  	//	ss.insert(x);   	}  	// 通过find(key)查找键值  	set<int>::iterator it;  	it = ss.find(2);  	cout << *it << endl; // 输出:2  	return 0;   }

4、交换两个容器元素

#include<iostream>  #include<set>  using namespace std;  int main(){  	set<int> st1;  	st1.insert(1);  	st1.insert(2);  	st1.insert(3);  	set<int> st2;  	st2.insert(4);  	st2.insert(5);  	st2.insert(6);  	// 交换两个容器的元素  	st1.swap(st2);    	// 遍历显示  	cout << "交换后的st1: ";  	set<int>::iterator it;  	for (it = st1.begin(); it != st1.end(); it++)  		cout << *it << " "; // 输出:4 5 6  	cout << endl;  	// 遍历显示  	cout << "交换后的st2: ";  	for (it = st2.begin(); it != st2.end(); it++)  		cout << *it << " "; // 输出:1 2 3  	cout << endl;    	return 0;  }



(adsbygoogle = window.adsbygoogle || []).push({});

作者:亿万年的星光 分类:C++知识 浏览: