一、容器set/multiset的使用方法;
二、functor的使用方法;
三、pair的使用方法。
set
set
set
multiset
multi set
multi set
set
setInt.insert(3);setInt.insert(1);setInt.insert(5);setInt.insert(2);
for(set
{
int iItem = *it;
cout << iItem; //或直接使用cout << *it
}
//这样子便顺序输出 1 2 3 5。
set.rbegin()与set.rend()。略。
使用stl提供的函数对象
set
setIntB.insert(3);
setIntB.insert(1);
setIntB.insert(5);
setIntB.insert(2);
此时容器setIntB就包含了按顺序的5,3,2,1元素
下面举出greater
struct greater
{
bool operator() (const int& iLeft,const int& iRight)
{
return (iLeft>iRight); //如果是实现less } } 容器就是调用函数对象的operator()方法去比较两个值的大小。 题目:学生包含学号,姓名属性,现要求任意插入几个学生对象到set容器中,使得容器中的学生按学号的升序排序。 解: //学生类 class CStudent { public: CStudent(intiID, string strName) { m_iID= iID; m_strName= strName; } int m_iID; //学号 string m_strName; //姓名 } //为保持主题鲜明,本类不写拷贝构造函数,不类也不需要写拷贝构造函数。但大家仍要有考虑拷贝构造函数的习惯。 //函数对象 struct StuFunctor { booloperator() (const CStudent &stu1,const CStudent &stu2) { return(stu1.m_iID } } //main函数 void main() { set setStu.insert(CStudent(3,"小张")); setStu.insert(CStudent(1,"小李")); setStu.insert(CStudent(5,"小王")); setStu.insert(CStudent(2,"小刘")); //此时容器setStu包含了四个学生对象,分别是按姓名顺序的“小李”,“小刘”,“小张”,“小王” } set setIntA.insert(3); setIntA.insert(1); setIntA.insert(7); setIntA.insert(5); setIntA.insert(9); set set setIntC= setIntA; //1 3 5 7 9 setIntC.insert(6); setIntC.swap(setIntA); //交换 set setIntA.insert(3); setIntA.insert(1); setIntA.insert(7); setIntA.insert(5); setIntA.insert(9); if(!setIntA.empty()) { intiSize = setIntA.size(); //5 } 删除区间内的元素 setInt是用set set ++ itBegin; set ++ itEnd; ++ itEnd; ++ itEnd; setInt.erase(itBegin,itEnd); //此时容器setInt包含按顺序的1,6,9,11四个元素。 删除容器中第一个元素 setInt.erase(setInt.begin()); //6,9,11 删除容器中值为9的元素 set.erase(9); 删除setInt的所有元素 setInt.clear(); //容器为空 set setInt.insert(3); setInt.insert(1); setInt.insert(7); setInt.insert(5); setInt.insert(9); set intiA = *itA; //iA == 5 intiCount = setInt.count(5); //iCount == 1 set set intiB = *itB; //iB == 5 intiC = *itC; //iC == 7 pair set ... //往setInt容器插入元素1,3,5,7,9 pair< set set set //此时 *itBeg==5 而 *itEnd == 7 int x; scanf("%ld",&x); multiset<int>h;//建立一个multiset类型,变量名是h,h序列里面存的是int类型,初始h为空 while(x!=0){ h.insert(x);//将x插入h中 scanf("%ld",&x); } pair multiset<int>::iterator itBeg = pairIt.first; multiset<int>::iterator itEnd = pairIt.second; int nBeg = *itBeg; int nEnd = *itEnd; while(!h.empty()){// 序列非空h.empty()==true时表示h已经空了 multiset<int>::iterator c = h.begin();//c指向h序列中第一个元素的地址,第一个元素是最小的元素 printf("%ld",*c);//将地址c存的数据输出 h.erase(c);//从h序列中将c指向的元素删除 } set对象的拷贝构造与赋值
set的大小
set的删除
set的查找
pair的使用