所有元素都会在插入时自动被排序
set(集合)/multiset(多重集合)属于关联式容器,底层结构是用二叉树实现
set和multiset区别:
set不允许容器中有重复的元素,multiset允许容器中有重复的元素
sets1;set.insert(10);sets2(s1); //拷贝构造s3=s2; //赋值//set容器插入数据时用insert
s1.empty();s1.size();s1.swap(s2);
s1.insert(10);//删除s1.begin()迭代器所指元素,返回下一个元素的迭代器
s1.erase(s1.begin()); s1.clear(); //清空
set::iterator pos = s1.find(30);
if(pos != s1.end())
{cout<<"找到了元素:"<<* pos<cout<<"未找到元素"<
set不可以插入重复数据,而multiset可以
set插入数据的同时会返回插入结果,表示插入是否成功
multiset不会检测数据,因此可以插入重复数据
成对出现的数据,利用对组可以返回两个数据
两种创建方式:
pair p (value1,value2);
pair p =make_pair(value1,value2);pairp ("Tom",20);
cout<<"姓名:"< p2 = make_pair("Jerry",20);
set容器默认排序规则为从小到大,掌握如何改变排序规则
利用仿函数,可以改变排序规则
/*第一种*/
class Mycompare
{public:bool operator() (int v1, int v2){return v1>v2;}
};
...
sets2;
...
for(set::iterator it = s2.begin();it!=s2.end(); it++)
{cout<<*it<<"";
}
//set存放内置数据类型,利用仿函数可以指定set容器的排序规则/*第二种*/
class Person
{...
};class Compareperson
{public:bool operator() (const Person& p1,const Person & p2){return p1.m_Age > p2.m_Age;}
};
...
for(set::iterator it =s.begin(); it!=s.end();it++)
{cout<<"姓名:"<m_Name<<"年龄:"<m_Age<