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)

代码如下:

cpp 复制代码
#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;
}

运行效果:

相关推荐
m0_380474161 小时前
AI 正在离开屏幕:从 AI 眼镜到原生智能体手机,终端入口之争打响
人工智能·智能手机
郑同学的笔记1 小时前
【c++随笔30】C++ 注册回调函数
开发语言·c++
lengxuenong2 小时前
树状数组 · 信息学学习手册2-离散化与逆序对
c++·学习·算法
十二2 小时前
【洛谷题解】P1115 最大子段和(前缀和 + 维护最小前缀)
数据结构·c++·算法·蓝桥杯
zhangrelay3 小时前
手机长周期测评十周年终结版本-2026
笔记·学习·智能手机
cu1434 小时前
细谈IT65631的具体功能与其应用
c++·单片机·嵌入式硬件
幻智星科技4 小时前
Karatsuba与CSD优化FPGA大数乘法
c++·fpga开发·密码学
flower9803234 小时前
C++消息总线软件开发框架AI重构版
c++·设计模式·架构
ii_best5 小时前
按键精灵手机助手 v5.2.1 实测:inputText 逐字延时 + 调试面板多行复制,安卓脚本开发的两个输入痛点一次解决
android·开发语言·智能手机·自动化·ai编程·按键精灵
lengxuenong5 小时前
树状数组 · 信息学学习手册3-优化LIS
c++·学习·算法