您的位置:首页 > 房产 > 建筑 > C++——list列表容器经典案例——手机按销量降序排列,若销量相同则按价格降序排列

C++——list列表容器经典案例——手机按销量降序排列,若销量相同则按价格降序排列

2024/10/6 10:41:10 来源:https://blog.csdn.net/qq_41264055/article/details/141142147  浏览:    关键词:C++——list列表容器经典案例——手机按销量降序排列,若销量相同则按价格降序排列

需求:使用list列表对商品进行排序,先通过销量降序排,若销量相同则根据价格升序排列输出

涉及到的知识点:list列表容器、自定义数据类型、自定义排序规则

实现步骤:

1,自定义数据类型Product,成员属性为产品名称(name_ )、产品销量(sale_ )、产品价格(price_ );成员函数为获取销量(getSale()),获取价格(getPrice())
2,使用list列表容器存放一些产品数据信息,通过push_back() 加入产品到list对象L
3,定义显示函数showProductInfo()
4,自定义排序规则函数compareProduct(),首先按销量降序,销量相同的情况下按价格升序
5,调用list列表的成员函数排序,传入自定义排序规则L.sort(compareProduct)

代码如下:

#include <iostream>
#include <list>
class Product 
{
public:Product(std::string name, int sale, int price) {this->name_ = name;this->sale_ = sale;this->price_ = price;}std::string getName() {return name_;}int getSale(){return sale_;}int getPrice(){return price_;}private:std::string name_; //产品名称int sale_;         //产品销量int price_;        //产品价格
};//显示函数
void showProductInfo(std::list<Product> L) 
{for (std::list<Product>::iterator it = L.begin(); it != L.end(); it++){std::cout << "Phone name is: " << (*it).getName() << " ,sale is: " << (*it).getSale() << " ,price is: " << (*it).getPrice() << std::endl;}
}//指定排序规则
bool compareProduct(Product& p1, Product& p2) 
{if (p1.getSale() == p2.getSale()) //若销量相同,则按价格升序{return p1.getPrice() < p2.getPrice();//销量相同,价格升序,前面小}else// 销量不同,按销量降序{return p1.getSale() > p2.getSale();//降序,前面的大}
}void test() 
{//首先销量降序(越多越好),再按价格升序(越便宜越好)std::list<Product> L;Product p1("小米13", 130000, 2799);Product p2("小米14", 100000, 3999);Product p3("小米13Pro", 90000, 3299);Product p4("小米14Pro", 50000, 4299);Product p5("iPhone13", 130000, 3999);Product p6("iPhone13Pro", 120000, 6999);Product p7("iPhone13ProMax", 70000, 7999);Product p8("iPhone14", 90000, 5999);Product p9("iPhone14Pro", 130000, 7999);Product p10("iPhone14ProMax", 100000, 9999);//插入数据L.push_back(p1);L.push_back(p2);L.push_back(p3);L.push_back(p4);L.push_back(p5);L.push_back(p6);L.push_back(p7);L.push_back(p8);L.push_back(p9);L.push_back(p10);std::cout << "sort before: ";std::cout << "--------------------------------------------" << std::endl;showProductInfo(L);L.sort(compareProduct);std::cout << "sort after: ";std::cout << "--------------------------------------------" << std::endl;showProductInfo(L);
}int main(int argc,char*argv[])
{test();return 0;
}

运行效果:

在这里插入图片描述

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com