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;
}