鱼C论坛

 找回密码
 立即注册
查看: 2433|回复: 6

如何把一个自己创建的class类插入到set容器并打印出来?

[复制链接]
发表于 2011-12-2 18:21:14 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
如题,谢谢!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-12-2 18:50:26 | 显示全部楼层
  1. #include <iostream>
  2. #include <set>
  3. #include <algorithm>
  4. #include <iterator>
  5. using namespace std;

  6. class MyClass{
  7.         int data;
  8. public:
  9.         MyClass( int d ):data(d){}
  10.         int GetData() const{ return data; }
  11.         void SetData( int d ){ data = d; }
  12. };

  13. bool operator<( const MyClass& c1, const MyClass& c2 ){
  14.         return c1.GetData()<c2.GetData();
  15. }
  16. ostream& operator<<( ostream& out, const MyClass& c ){
  17.         return  out<<c.GetData();
  18. }

  19. int main(){
  20.         set<MyClass> my_set;
  21.         for( int i=10;i>0;--i ) my_set.insert( MyClass(i) );
  22.         copy( my_set.begin(), my_set.end(), ostream_iterator<MyClass>(cout,"\n") );
  23. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-12-2 18:55:50 | 显示全部楼层
bool operator<( const MyClass& c1, const MyClass& c2 ){
        return c1.GetData()<c2.GetData();
}
ostream& operator<<( ostream& out, const MyClass& c ){
        return  out<<c.GetData();

请问为何需重载这两个运算符?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-12-2 18:56:39 | 显示全部楼层
最后一个“<<”重载函数,我不能直接用cout输出吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-12-2 19:53:49 | 显示全部楼层
如果我把以下的class的数据保存到容器中,需要如何去实现?要重载什么运算符吗?对STL不是很懂,谢谢!
class CFlight
{
private:
        string m_sFlightDate;                                       
        string m_sFlightdNumber;                                 
        string m_airplanType;                                       
        string m_sTakeOffCity;                                       
        string m_sArriveCicty;                                       
        int m_iDistance;                                               
        int m_iSumFirst_classStateroomCabinAirTicket;   
        int m_iSumBusinessClassAirTicket;                               
        int m_iSumTouristClassAirTicket;                                       
        float m_fFirs_classStateroomCabinPrice;
        float m_fBusinessClassPrice;                       
        float m_fTouristClassPrice;                               

public:
        CFlight();
        void SetCFlight(string& flightDate, string& flightNumber, string& airplanType);
        void SetFlightDate(string& flightDate);
        void SetFlightdNumber(string& flightNumber);
        void SetAirplanType(string& airplanType);
        void SetTakeOffCity(string& takeOffCity);
        void SetArriveCicty(string& arriveCicty);
        void SetDistance(int& distance);
        void SetSumFirst_classStateroomCabinAirTicket(int& sumFirst_classStateroomCabinAirTicket);
        void SetSumBusinessClassAirTicket(int& sumBusinessClassAirTicket);
        void SetSumTouristClassAirTicket(int& sumTouristClassAirTicket);
        void SetFirs_classStateroomCabinPrice(float& firs_classStateroomCabinPrice);
        void SetBusinessClassPrice(float& businessClassPrice);
        void SetTouristClassPrice(float& touristClassPrice);
};
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-12-2 20:40:21 | 显示全部楼层
1. set容器默认按<次序存放元素,所以重载<
2. 不重载运算符<<就不能用<<直接输出该元素
3.你要为类CFlight重载运算符<和<<

4.此外,你的成员函数的参数类型写得很不好,让人看了立马知道你是新手...(基本类型int,float等等不要用引用,直接值传递,string等非基本类型,必须用const引用,否则你无法将如"abcd"这样的C风格字符串传给string&类型的参数)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-12-2 21:14:05 | 显示全部楼层
谢谢仰望天上的光的指点!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-19 01:48

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表