C++ 对象的顺序列表C;选择字段

C++ 对象的顺序列表C;选择字段,c++,list,sorting,object,C++,List,Sorting,Object,经过大量的研究和尝试来解决这个问题 我想知道是否有一种方法来排序C++中的对象列表;p> 到目前为止,我看到的所有解决方案,我们必须事先定义将使用哪个营地进行排序 我想要的是用户可以自由选择他想要使用哪个营地来排序这是我的代码 class LOL { public: LOL( const string& Nickname = "", int skill = 0,int level= 0 ); bool operator > ( const LOL &rhs

经过大量的研究和尝试来解决这个问题

我想知道是否有一种方法来排序C++中的对象列表;p> 到目前为止,我看到的所有解决方案,我们必须事先定义将使用哪个营地进行排序

我想要的是用户可以自由选择他想要使用哪个营地来排序这是我的代码

class LOL
{
   public:
   LOL( const string& Nickname = "", int skill = 0,int level= 0 );
   bool operator > ( const LOL &rhs ) const; 
   void print() const;

   private:
   int level_;
   string Nickname_;
   int skill_;
};

inline
LOL::LOL( const string& Nickname, int skill, int level)
   : level_( level), Nickname_( Nickname ), skill_( skill )
{} 



inline
bool LOL::operator > ( const LOL& rhs ) const
{ return Nickname_  > rhs.Nickname_; } 



inline
void LOL::print() const
{ cout << Nickname_ << " from level " << level_
   << " has skill of [ " << skill_ <<" ]"<< endl<< endl;
}

int main( )
{
   list<LOL> list1;
   list1.push_back( LOL( "Dhespair", 50000, 30 ) );
   list1.push_back( LOL( "Pedro", 1, 1 ) );
   list1.push_back( LOL( "Blackblood", 99999, 30 ) );
   list1.push_back( LOL( "Zladovic", 30000, 25 ) );

   list1.sort( greater <LOL>()  );
   for_each( list1.begin(), list1.end(), mem_fun_ref( &LOL::print ) );
   printf("\n\n");
   system("pause");
}
类LOL
{
公众:
LOL(常量字符串和昵称=”,智力技能=0,智力水平=0);
布尔运算符>(常量LOL和rhs)常量;
无效打印()常量;
私人:
国际水平!;
字符串昵称;
智力技能;
};
内联
LOL::LOL(常量字符串和昵称,整数技能,整数级别)
:级别、昵称、技能
{} 
内联
bool LOL::运算符>(常量LOL和rhs)常量
{返回昵称\>rhs.昵称\;}
内联
void LOL::print()常量
{cout para maior oubool comparetwolobjectsway1(LOL&A,LOL&B)
{
/*确定是否为AB的逻辑*/
}
道岔(索道)
{
案例1:
列表1.排序(&compareTwolobject1);
打破
案例2:
列表1.排序(&comparetwolobject2);
打破
}

Whoops。您仍然可以提供一个自定义的
Compare
函数来进行列表排序,但是它仍然可以工作。感谢您的帮助,伙计,但这并不是我想要的,我想利用“更大”和“更少”这两个函数我尝试了另一个选项,我现在要编辑并向您展示我是如何做的,如果您知道如何做得更好,我将非常感谢任何提示=)最好考虑使用参数化谓词,使用参数根据内部标准规定顺序,解决这个问题:
std::less
std::greater``始终命中包含的类限定
运算符
class LOL
{
   public:
   LOL( const string& Nickname = "", int skill = 0,int level= 0 , int op=1);
   bool operator > ( const LOL &rhs        ) const; // MUDAR O > para maior  ou < MENOR
   bool operator < ( const LOL &rhs        ) const; // MUDAR O > para maior  ou < MENOR
   void print() const;

   private:
   int level_;
   string Nickname_;
   int skill_;
   int op_;
};

inline
LOL::LOL( const string& Nickname, int skill, int level, int op)
   : level_( level), Nickname_( Nickname ), skill_( skill ), op_( op )
{} 



inline
bool LOL::operator > ( const LOL& rhs ) const
{ 
    switch(rhs.op_)
    {
    case 1:
    return Nickname_  > rhs.Nickname_; 
    break;

    case 2:
    return level_  > rhs.level_; 
    break;

    case 3:
    return skill_ > rhs.skill_; 
    break;
    } // MUDAR O  > para maior  ou < MENOR e ESCOLHER CAMPO A TER EM CONTA
}

inline
bool LOL::operator < ( const LOL& rhs ) const
{ 
    switch(rhs.op_)
    {
    case 1:
    return Nickname_  < rhs.Nickname_; 
    break;

    case 2:
    return level_  < rhs.level_; 
    break;

    case 3:
    return skill_ < rhs.skill_; 
    break;
    } // MUDAR O  > para maior  ou < MENOR e ESCOLHER CAMPO A TER EM CONTA
}


inline
void LOL::print() const
{ cout << Nickname_ << " from level " << level_
   << " has skill of [ " << skill_ <<" ]"<< endl<< endl;
}

int main( )
{
   list<LOL> list1;
   list1.push_back( LOL( "Dhespair", 50000, 30,3 ) );
   list1.push_back( LOL( "Pedro", 1, 1,3 ) );
   list1.push_back( LOL( "Blackblood", 99999, 30,3) );
   list1.push_back( LOL( "Zladovic", 30000, 25,3 ) );

   list1.sort( less <LOL>()  );
   for_each( list1.begin(), list1.end(), mem_fun_ref( &LOL::print ) );
   printf("\n\n");
   system("pause");
}
bool compareTwoLOLObjectsWay1(LOL &A, LOL &B)
{
  /* Logic to determine if A<B */
}

bool compareTwoLOLObjectsWay2(LOL &A, LOL &B)
{
  /* Logic to determine if A>B */
}

switch(sortWay)
{
  case 1:
    list1.sort(&compareTwoLOLObjectsWay1);
    break;
  case 2:
    list1.sort(&compareTwoLOLObjectsWay2);
    break;
}