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;
}

运行效果:

在这里插入图片描述

  • 9
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

beyond谚语

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值