【STL】set容器、pair队组与map容器

目录

1.修改set容器排序规则

[2. set容器的各种函数](#2. set容器的各种函数)

3.set构造函数multiset

4.创建pair队组

5.map容器


1.修改set容器排序规则

set容器会自动以升序的方式进行排序,想要改变可以制定排序规则,set<int,排序规则> s;

但需要注意,在尖括号里面必须是类型,所以可以创建一个类,在类里面来实现我们的排序

cpp 复制代码
#include<iostream>
#include<set>//头文件 
using namespace std;
void printset(set<int> &s)
{
	set<int>::iterator it=s.begin();
	for( ;it!=s.end();it++)
	{
		cout<<*it<<" ";
	}
	cout<<endl;
}

class myrule
{
	public:
		bool operator()(int v,int v2)
		{
			return v>v2;
		}
};

void printmyrule(set<int,myrule> &m)
{
	set<int,myrule>::iterator it=m.begin();
	for( ;it!=m.end();it++)
	{
		cout<<*it<<" "; 
	}
	cout<<endl;
}

int main()
{
	set<int> s;//自动以升序排 
	s.insert(10);
	s.insert(30);
	s.insert(20);
	s.insert(50);
	s.insert(60);
	s.insert(40);
	printset(s);
	
	//set<int,排序规则> 
	set<int,myrule> m;//myrule改变排序方式 
	m.insert(10);
	m.insert(30);
	m.insert(20);
	m.insert(50);
	m.insert(60);
	m.insert(40);
	printmyrule(m);
	
	return 0;
 } 

2. set容器的各种函数

  • find(x)函数若查找到返回的是该值的迭代器,若不存在,返回set.end();
  • lower_bound(x) //下限,返回的是第一个key>=m元素的迭代器
  • upper_bound(x) //上限,返回的是第一个key>m的迭代器
  • equal_range(x) //返回x上下限的两个迭代器,所以只能用队组pair的方式来存储上下限

注意:set只有一个键值,也就是说不能有存入两个相同的数据,不然只会输出一个

cpp 复制代码
#include<iostream>
#include<set>//头文件 
using namespace std;
void printset(set<int> &s)
{
	set<int>::iterator it=s.begin();
	for( ;it!=s.end();it++)
	{
		cout<<*it<<" ";
	}
	cout<<endl;
}


int main()
{
	set<int> s;//自动以升序排 
	s.insert(10);
	s.insert(30);
	s.insert(20);
	s.insert(50);
	s.insert(60);
	s.insert(40);
	printset(s);
	
	set<int>::iterator ret;
	ret=s.find(50);//因为find()返回的为迭代器,所以要用迭代器来装
	if(ret!=s.end())
	{
		cout<<"找到结果:"<<*ret; 
	} 
	cout<<endl;
	
	set<int>::iterator it;
	it=s.lower_bound(50);
	if(it!=s.end())
	{
		cout<<"下限为:"<<*it<<endl;
	}
	
	set<int>::iterator its;
	its=s.upper_bound(50);
	if(its!=s.end())
	{
		cout<<"上限为:"<<*its<<endl;
	}

	//pair<第一个值类型,第二个值类型>  返回两个值
	//以队组的方式储存上下限 
	 pair<set<int>::iterator,set<int>::iterator> pa;//上下限是以迭代器的方式返回 
	 pa=s.equal_range(50);
	 if(pa.first!=s.end())
	 {
	 	cout<<"下限为:"<<(*pa.first)<<endl; 
	 }
	 if(pa.second!=s.end())
	 {
	 	cout<<"下限为:"<<(*pa.second)<<endl; 
	 }
	return 0;
 } 

3.set构造函数multiset

  • multiset与set最大的区别在于set不可以有两个相同的值,但multiset可以有相同的数值
  • multiset的头文件依旧为#include<set>
  • 如果有两个相同的值在set里,只会输出一个

4.创建pair队组

  • pair的头文件可以是STL容器中的任意一个,如:vector、deque、stack、list、set、map,但string除外

5.map容器

  • map返回的有两个,键值k和实值,所以我们使用pair队组来接收map容器的返回值
  • map与set相同,只能有一个k值,不能有重复的,但multimap可以
cpp 复制代码
#include<iostream>
#include<map>
#include<string>
using namespace std;
class student
{
	friend void printmap(map<int,student> &m);
private:
	int num;
	string name;
	float score;
public:
	student(){
	}
	student(int num,string name,float score)
	{
		this->num=num;
		this->name=name;
		this->score=score;
	}
};
void printmap(map<int,student> &m)
{
	map<int,student>::iterator it=m.begin();
	for( ;it!=m.end();it++){
		cout<<(*it).first<<" "<<(*it).second.name<<" "<<(*it).second.score<<endl;
	}
}
int main()
{
	map<int,student> m;
	//方法一: 
	m.insert(pair<int,student>(2000,student(2000,"chen",89.2f)));
	
	//方法二:(推荐)
	m.insert(make_pair(2001,student(2001,"zhang",68.2f)));
	
	//方法三:(危险)使用这个方法要确保m括号里面的k值存在 
	m[2002]=student(2002,"tian",98.2f);
	
	printmap(m);
	return 0;
 } 
相关推荐
88号技师36 分钟前
2024年12月一区SCI-加权平均优化算法Weighted average algorithm-附Matlab免费代码
人工智能·算法·matlab·优化算法
IT猿手37 分钟前
多目标应用(一):多目标麋鹿优化算法(MOEHO)求解10个工程应用,提供完整MATLAB代码
开发语言·人工智能·算法·机器学习·matlab
青春男大37 分钟前
java栈--数据结构
java·开发语言·数据结构·学习·eclipse
88号技师38 分钟前
几款性能优秀的差分进化算法DE(SaDE、JADE,SHADE,LSHADE、LSHADE_SPACMA、LSHADE_EpSin)-附Matlab免费代码
开发语言·人工智能·算法·matlab·优化算法
一只小bit41 分钟前
数据结构之栈,队列,树
c语言·开发语言·数据结构·c++
我要学编程(ಥ_ಥ)1 小时前
一文详解“二叉树中的深搜“在算法中的应用
java·数据结构·算法·leetcode·深度优先
埃菲尔铁塔_CV算法1 小时前
FTT变换Matlab代码解释及应用场景
算法
mashagua2 小时前
RPA系列-uipath 学习笔记3
笔记·学习·rpa
nikoni232 小时前
828考研资料汇总
笔记·其他·硬件工程
沐泽Mu2 小时前
嵌入式学习-QT-Day05
开发语言·c++·qt·学习