stl-set
set/multiset会根据待定的排序准则,自动将元素排序。两者不同在于前者不允许元素重复,而后者允许。
1) 不能直接改变元素值,因为那样会打乱原本正确的顺序,要改变元素值必须先删除旧元素,则插入新元素
2) 不提供直接存取元素的任何操作函数,只能通过迭代器进行间接存取,而且从迭代器角度来看,元素值是常数
3) 元素比较动作只能用于型别相同的容器(即元素和排序准则必须相同)
set模板原型://Key为元素(键值)类型
template <class Key, class Compare=less<Key>, class Alloc=STL_DEFAULT_ALLOCATOR(Key) >
从原型可以看出,可以看出比较函数对象及内存分配器采用的是默认参数,因此如果未指定,它们将采用系统默认方式,
另外,利用原型,可以有效地辅助分析创建对象的几种方式
1) 不能直接改变元素值,因为那样会打乱原本正确的顺序,要改变元素值必须先删除旧元素,则插入新元素
2) 不提供直接存取元素的任何操作函数,只能通过迭代器进行间接存取,而且从迭代器角度来看,元素值是常数
3) 元素比较动作只能用于型别相同的容器(即元素和排序准则必须相同)
set模板原型://Key为元素(键值)类型
template <class Key, class Compare=less<Key>, class Alloc=STL_DEFAULT_ALLOCATOR(Key) >
从原型可以看出,可以看出比较函数对象及内存分配器采用的是默认参数,因此如果未指定,它们将采用系统默认方式,
另外,利用原型,可以有效地辅助分析创建对象的几种方式
set的使用。
//set's using
#include
#include
using namespace std;
set
m_set;
set
::iterator it;
int main( )
{
for(int i=9;i>=0;i--)
m_set.insert(i);//insert
cout<
set ,重载自定义结构体的 ‘()’运算符
//set ,重载自定义结构体的 ‘()’运算符
#include
#include
using namespace std;
struct m_struct{
int a,b;
};
struct myless {
bool operator ()(const m_struct &A,const m_struct &B)const{
if(A.a
m_set;
set
::iterator it;
m_struct x,y;
int main( )
{
x.a=3;y.a=2;
m_set.insert(x);//insert
m_set.insert(y);
for(it=m_set.begin();it!=m_set.end();it++)
cout<<(*it).a;//23
return 0;
}
重载‘<’运算符
//set ,重载结构体的‘<’运算符
#include
#include
using namespace std;
struct m_struct{
int a,b;
bool operator < (const m_struct &A)const{
if(a
m_set;
set
::iterator it;
m_struct x,y;
int main( )
{
x.a=3;
y.a=2;
m_set.insert(x);//insert
m_set.insert(y);
for(it=m_set.begin();it!=m_set.end();it++)
cout<<(*it).a;//输出按m_struct类型的升序,若不重载
<运算符,无法通过编译 return 0; } < code>
部分函数
#include
//构造函数
set(const set&);
//增加函数
iterator insert(iterator it,const T& x);//在it所指位置前插入
//删除函数
iterator erase(iterator it);
size_type erase(const Key& key);
void clear();
//遍历函数
iterator begin();
iterator end();
//判断函数
bool empty()const();
//大小函数
int size()const;
//查找函数
const_iterator find(const Key& key)const;//若找不到返回 set_ob.end()