STL set复杂类型操作 - 比特·罗伯特 - 博客园

本文详细介绍了如何在C++ STL set容器中使用自定义类作为元素。通过实现拷贝构造函数、赋值运算符重载及比较运算符,解决了在set中插入自定义类型对象的问题。

STL set复杂类型操作 - 比特·罗伯特 - 博客园

STL set复杂类型操作

以前用set的时候总是小打小闹,参数类型基本是string,int,后来遇到需要用类和结构体做参数的,如下所示:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
class CStudent
{
public :
  int nStudentID;
  int nAge;
public :
  //缺省构造函数——通常为空
  CStudent() { }
  // 完整的构造函数
  CStudent( int nSID, int nA) { nStudentID=nSID; nAge=nA; }
};
 
set <CStudent> mapStudent;
mapStudent.insert(CStudent(100232,42));

 

然后就是一堆问题....

后来试了好久发觉类有一定的要求,STL作为一个容器只是在调用相应的方法,set的基本要求应该是拷贝构造函数,赋值运算符重载,大于小于运算符重载,如下所示:

 

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
class CStudent
{
public :
     int nStudentID;
     int nAge;
public :
     //缺省构造函数——通常为空
     CStudent() { }
     // 完整的构造函数
     CStudent( int nSID, int nA) { nStudentID=nSID; nAge=nA; }
     //拷贝构造函数
     CStudent( const CStudent& ob)
     {
         nStudentID=ob.nStudentID; nAge=ob.nAge;
     }
     // 重载“=”
     void operator = ( const CStudent& ob)
     {
         nStudentID=ob.nStudentID; nAge=ob.nAge;
     }
     bool operator < ( const CStudent& ob) const
     {
         return nStudentID<ob.nStudentID;
     }
     bool operator >( const CStudent& ob)
     {
         return nStudentID>ob.nStudentID;
     }
 
 
};
 
set <CStudent> mapStudent;
mapStudent.insert(CStudent(100232,42));

 

然后就没问题了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值