set 和map容器基本使用

1.set 容器

(1)关联式容器
(2)插入数据自动排序,按照key,没有value;
(3)没有pushback插入,插入用insert;insert的返回值pair<iterator , bool>其中bool为插入是否成功,因为不允许重复插入;
(4)没有pop,删除用erase,可以传值或迭代器;
(5)find(key):查找key是否存在,存在返回迭代器,不存在返回s.end();
(6)count(key):查找key的个数,set只能是0或者1;
(7)lower_bound(key):找到>=key的第一个元素的迭代器;
upper_bound(key):找到>key的第一个元素的迭代器
(8)equal_range(key): 返回迭代器类型的pair,pair内容为与key相等的上下限;eg:1,2,3,4,6;那么5的上下限就是4,6的迭代器;
(9)set默认从小到大,若从大到小利用仿函数:set<int ,mycompare>;

2.pair对组的创建和使用

创建: (1) pair<string ,int > p (string(“Tom”,100);
(2)pair<string ,int > p = make _pair(“Tom”,200);
使用:p.first / p.second

3.map容器

(1)元素为pair类型,也key值不可以重复;
(2)多种插入方式:m.insert(pair<int ,int >(10,10)); m.insert(make_pair(10,20)) ;
(3)count(3):map只能是0或1,mulitmap可以大于1;
(4)排序规则可以自己写;

4.multiset :可以插入相同的key

multimap:可以插入相同的key

set的基本使用

#include<iostream>
#include<set>
using namespace std;

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

void test01()
{
	
	set<int> s1;
	//插入
	s1.insert(1);
	s1.insert(2);
	s1.insert(3);
	s1.insert(4);
	s1.insert(5);
	s1.insert(3);
	printSet(s1);


	//删除
	//s1.erase(s1.begin());
	//s1.erase(2);
	//printSet(s1);


	//查找
	//set<int>::iterator it = s1.find(3);
	//if(it!=s1.end())
	//{
	//	cout<<*it<<endl;
	//}
	//
	//int num = s1.count(3);
	//cout<<num<<endl;

	pair<set<int>::iterator,set<int>::iterator> it1 = s1.equal_range(2);
	if(it1.first !=s1.end())
	{
		cout<<*(it1.first)<<endl;
	}
	if(it1.second !=s1.end())
	{
		cout<<*(it1.second)<<endl;
	}
}

void test02()
{
	
	//insert的返回类型,bool为是否插入成功
	set<int> s;
	s.insert(10);
	pair<set<int>::iterator,bool> p = s.insert(10);
	if(p.second == false)
	{
		cout<<"插入失败"<<endl;
	}
	else
	{
		cout<<"插入成功"<<endl;
	}



	//set默认从小到大
	set<int> s1;
	s1.insert(10);
	s1.insert(20);
	s1.insert(30);
	s1.insert(40);
	s1.insert(50);
	s1.insert(60);
	printSet(s1);

	//改变成从大到小
	class myCompare
	{
	public:
		bool operator()(int val1, int val2)
		{
			return val1>val2;
		}
	};
	set<int,myCompare> s2;
	s2.insert(10);
	s2.insert(20);
	s2.insert(30);
	s2.insert(40);
	s2.insert(50);
	s2.insert(60);
	for(set<int,myCompare>::iterator it=s2.begin();it!=s2.end();++it)
	{
		cout<<*(it)<<" ";
	}
	cout<<endl;


}
int main()
{
	//test01();
	test02();
	return 0;
}

map的基本使用

#include<iostream>
#include<map>

using namespace std;

void printMap(map<int ,int > &m)
{
	for(map<int ,int>:: iterator it=m.begin();it != m.end();++it)
	{
		cout<<"key ="<<(it->first)<<"  ";
		cout<<"val ="<<(it->second)<<endl;;
	}
}

void test01()
{
	map<int ,int > m;
	m.insert(make_pair(1,10));
	m.insert(pair<int ,int >(2,20));
	m[3]=30;
	printMap(m);
	cout<<" ---------------------------------"<<endl;


	m.erase(1);//三个重载:key值;迭代器区间;迭代器;
	printMap(m);
	cout<<" ---------------------------------"<<endl;

	int count = m.count(2);
	cout<<count<<endl;
	cout<<" ---------------------------------"<<endl;

	//从大到小排序
	class myCompare
	{
	public:
		bool operator()(int v1,int v2)
		{
			return v1>v2;
		}
	};
	map<int ,int ,myCompare> m1;
	m1.insert(make_pair(1,10));
	m1.insert(pair<int ,int >(2,20));
	m1[3]=30;
	for(map<int ,int ,myCompare>::iterator it=m1.begin();it!=m1.end();++it)
	{
		cout<<"key ="<<(it->first)<<"  ";
		cout<<"val ="<<(it->second)<<endl;;
	}
	cout<<" ---------------------------------"<<endl;

	pair<map<int ,int ,myCompare>::iterator,map<int ,int ,myCompare>::iterator> p=m1.equal_range(2);
	cout<<"key ="<<(p.first->first)<<endl;
	cout<<"key ="<<(p.second->first)<<endl;
	cout<<" ---------------------------------"<<endl;
	
	map<int ,int ,myCompare>::iterator it = m1.find(4);
	if(it != m1.end() )
	{
		cout<<"查找成功"<<endl;
	}
	else
	{
		cout<< "查找失败"<<endl;
	}
	
} 
int main()
{
	test01();
	return 0;
}
发布了52 篇原创文章 · 获赞 14 · 访问量 5613

猜你喜欢

转载自blog.csdn.net/YanWenCheng_/article/details/104077011