分享
三行代码  ›  专栏  ›  技术社区  ›  user3118602

基于两个属性排序类指针向量?

  •  0
  • user3118602  · 技术社区  · 1 周前

    我正在尝试对类指针的向量进行排序 vector <Building*> company . 下面是我的代码

    sort(company.begin(), company.end(), [] (Building* lhs, Building* rhs)
    {
        return (lhs->getCompanyName() > rhs->getCompanyName() && lhs->height() > rhs->height());
    }); 
    

    我试图根据类中名为 getCompanyName() height() . getCompanyName 是从A到Z的字母顺序 height

    以上排序不起作用。

    但是,如果我将这两个条件拆分为以下两个条件:

    sort(company.begin(), company.end(), [] (Building* lhs, Building* rhs)
    {
        return lhs->getCompanyName() > rhs->getCompanyName();
    }); 
    
    sort(company.begin(), company.end(), [] (Building* lhs, Building* rhs)
    {
        return lhs->height() > rhs->height();
    }); 
    

    矢量将正确排序,但仅基于一个属性。

    编辑:

    getCompanyName()

    只在之后 getCompanyName() 然后进行排序 将按降序排序。

    Company Name: AQA
    Height: 300
    
    Company Name: AFE
    Height: 200
    
    Company Name: BAC
    Height: 600
    
    Company Name: BFE
    Height: 100
    
    Company Name: CJE
    Height: 1200
    
    2 回复  |  直到 1 周前
        1
  •  1
  •   cigien    1 周前

    如果你想分类 第一 通过增加 getCompanyName() 通过减少 height()

    sort(company.begin(), company.end(), [] (Building* lhs, Building* rhs)
    {
        return lhs->getCompanyName() < rhs->getCompanyName()    // increasing getCompanyName()
            || (lhs->getCompanyName() == rhs->getCompanyName()  // if equal getCompanyName() 
                &&  lhs->height() > rhs->height());             // then decreasing height()
    }); 
    
        2
  •  1
  •   cigien    1 周前

    return 
    (lhs->getCompanyName() > rhs->getCompanyName()) || 
    (lhs->getCompanyName() == rhs->getCompanyName() &&
        lhs->height() > rhs->height());
    

    即:先按名称排序,如果名称相同,则按高度排序。