概述
set 只能把节点删了再加入新的节点,不能改节点的值
#include<iostream>
#include<set>
using namespace std;
//仿函数
class mycompare{
public:
//运算符重载
bool operator()(int v1,int v2){
return v1 > v2;
}
};
void test01(){
//自动进行排序,默认从小到大
set<int> s1;
s1.insert(7);
s1.insert(2);
s1.insert(4);
s1.insert(5);
s1.insert(1);
//打印
for(set<int>::iterator i = s1.begin();i!=s1.end();i++)
cout<<*i<<" ";
cout<<endl;
//赋值操作
set<int> s2;
s2 = s1;
//删除操作
s1.erase(s1.begin());
s1.erase(7);
//打印
for(set<int>::iterator i = s1.begin();i!=s1.end();i++)
cout<<*i<<" ";
cout<<endl;
//改变默认排序
set<int,mycompare> s3; //多一个仿函数
s3.insert(7);
s3.insert(2);
s3.insert(4);
s3.insert(5);
s3.insert(1);
//打印
for(set<int>::iterator i = s3.begin();i!=s3.end();i++)
cout<<*i<<" ";
cout<<endl;
}
void test02(){
//实值
set<int> s1;
s1.insert(7);
s1.insert(2);
s1.insert(4);
s1.insert(5);
s1.insert(1);
//查找 find(key) 查找key是否存在,若存在,返回改键的元素的迭代器,否则返回map.end()
set<int>:: iterator ret = s1.find(3);
if(ret == s1.end())
cout<<"没有找到该值"<<endl;
else
cout<<"ret :"<<*ret<<endl;
//找到第一个【大于等于】key的元素 lower_bound(key)
ret = s1.lower_bound(2);
if(ret == s1.end())
cout<<"没有找到该值"<<endl;
else
cout<<"ret :"<<*ret<<endl;
//找到第一个【大于】key的元素 upper_bound(key)
ret = s1.upper_bound(2);
if(ret == s1.end())
cout<<"没有找到该值"<<endl;
else
cout<<"ret :"<<*ret<<endl;
//euqal_range 返回 lower_bound 和 upper_bound 的值
pair<set<int>::iterator,set<int>::iterator> myret =s1.equal_range(2);
if(myret.first == s1.end()){
cout<<"没有找到"<<endl;
}
else{
cout<<"myret.first:"<<*myret.first<<endl;
}
if(myret.second == s1.end()){
cout<<"没有找到"<<endl;
}
else{
cout<<"myret.second:"<<*myret.second<<endl;
}
}
class Person{
public:
int age;
int id;
public:
Person(int age,int id):age(age),id(id){};
};
class mycompare2{
public:
bool operator()(Person p1, Person p2){
return p1.age > p2.age;//从大到小
}
};
//往 set容器放入对象类型(但set是需要将元素排序的,对于对象不知道如何进行排序)
//所以需要添加仿函数
void test03(){
set<Person,mycompare2> s;
Person p1(10,100),p2(20,200),p3(30,300);
s.insert(p1);
s.insert(p2);
s.insert(p3);
for(set<Person,mycompare2>::iterator i = s.begin(); i != s.end();i++){
cout<<"Age :"<<(*i).age<<" "<<"Id :"<<(*i).id<<endl;
}
Person p4(20,200); //查找是根据对象里面的内容进行查找,而不是对变量名
//查找
set<Person,mycompare2>::iterator ret = s.find(p4);
if(ret == s.end()){
cout<<"没有找到"<<endl;
}
else
cout<<"找到"<<endl;
}
int main(){
test01();
test02();
test03();
return 0;
}
最后
以上就是粗心摩托为你收集整理的【STL】12 二叉树set容器操作的全部内容,希望文章能够帮你解决【STL】12 二叉树set容器操作所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复