#include
set setInt;
//一个存放int的set容器。set setFloat;
//一个存放float的set容器。set setString;
//一个存放string的set容器。multiset mulsetInt;
//一个存放int的multi set容器。multi set multisetFloat;
//一个存放float的multi set容器。multi set multisetString;
//一个存放string的multi set容器。set.insert(elem);
//在容器中插入元素。set.begin();
//返回容器中第一个数据的迭代器。set.end();
//返回容器中最后一个数据之后的迭代器。set.rbegin();
//返回容器中倒数第一个元素的迭代器。set.rend();
//返回容器中倒数最后一个元素的后面的迭代器。set > setIntA;
//该容器是按升序方式排列元素。set> setIntB;
//该容器是按降序方式排列元素。set(const set &st);
//拷贝构造函数set& operator=(const set &st);
//重载等号操作符set.swap(st);
//交换两个集合容器set.size();
//返回容器中元素的数目set.empty();
//判断容器是否为空set.clear();
//清除所有元素set.erase(pos);
//删除pos迭代器所指的元素,返回下一个元素的迭代器。set.erase(beg,end);
//删除区间[beg,end)的所有元素 ,返回下一个元素的迭代器。set.erase(elem);
//删除容器中值为elem的元素。set.find(elem);
//查找elem元素,返回指向elem元素的迭代器。set.count(elem);
//返回容器中值为elem的元素个数。对set来说,要么是0,要么是1。对multiset来说,值可能大于1。set.lower_bound(elem);
//返回第一个>=elem元素的迭代器。set.upper_bound(elem);
// 返回第一个>elem元素的迭代器。set.equal_range(elem);
//返回容器中与elem相等的上下限的两个迭代器。上限是闭区间,下限是开区间,如[beg,end)。以上函数返回两个迭代器,而这两个迭代器被封装在pair中。以下讲解pair的含义与使用方法。
完整示例代码:
#include
#include using namespace std;class Student
{
private: int id;string name;
public:Student(int i, string n);void show()const;bool operator<(const Student &s) const;bool operator>(const Student &s) const;
};Student::Student(int i, string n)
{id = i;name = n;
}void Student::show() const
{cout << "id " << id << " name " << name << endl;
}bool Student::operator<(const Student &s) const
{return this->id < s.id;
}bool Student::operator>(const Student &s) const
{return this->id > s.id;
}int main()
{Student s1(3, "aa");Student s2(1, "zz");Student s3(5, "ff");Student s4(4, "ee");Student s5(2, "bb");Student s6(7, "cc");Student s7(8, "hh");Student s8(6, "jj");//set s; // 默认 < set > s;s.insert(s1);s.insert(s2);s.insert(s3);s.insert(s4);s.insert(s5);s.insert(s6);s.insert(s7);s.insert(s8);for (set::iterator it = s.begin(); it != s.end(); it++){it->show();}cout << "集合大小:" << s.size() << endl;cout << "set的删除" << endl;s.erase(s.begin());for (set::iterator it = s.begin(); it != s.end(); it++){it->show();}cout << "set区间删除" << endl;s.erase(--(s.end()), s.end()); // 这里相当于删除最后一个元素for (set::iterator it = s.begin(); it != s.end(); it++){it->show();}cout << "set删除具体元素" << endl;Student stu(3, "zz"); //按照id查找并删除(因为排序的时候是按照id进行排序的)s.erase(stu);for (set::iterator it = s.begin(); it != s.end(); it++){it->show();}cout << "set的查找" << endl;//set >::iterator it = s.find(stu); // 会找不到,因为前面被删除了set >::iterator it = s.find(s6);if (it == s.end()){cout << "对象不存在" << endl;}else{it->show();}cout << "set的统计" << endl;cout << s.count(s6) << endl; // set不允许有重复,只能是0 或则 1cout << "lower_bound" << endl;Student ss(3, "aaa");it = s.lower_bound(ss);if (it == s.end()){cout << "不存在" << endl;}else{it->show();}cout << "upper_bound" << endl;it = s.upper_bound(s6);if (it == s.end()){cout << "不存在" << endl;}else{it->show();}cout << "equal_range" << endl;//pair 类型 模板类 有两个成员变量pair >::iterator, set >::iterator> p; //创建pair对象p = s.equal_range(ss); p.first->show(); //p.first第一个类型(迭代器)p.second->show(); //p.second第二个类型(迭代器)return 0;
}
运行结果: