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

运行效果:

相关推荐
神仙别闹4 分钟前
基于QT(C++)实现的翻金币游戏
c++·qt·游戏
UP_Continue20 分钟前
C++--右值和移动语义
开发语言·c++
wanderist.1 小时前
2025年蓝桥杯省赛C++大学A组
c++·算法·蓝桥杯
月上林梢1 小时前
QT圆形加载进度条
数据库·c++·qt·进度条
啊董dong1 小时前
noi-2025年12月16号作业
数据结构·c++·算法·noi
white-persist1 小时前
【攻防世界】reverse | simple-check-100 详细题解 WP
c语言·开发语言·汇编·数据结构·c++·python·算法
欧特克_Glodon2 小时前
C++医学图像处理经典ITK库用法详解<四>: 图像分割模块功能
c++·图像处理·图像分割·itk
仰泳的熊猫2 小时前
1083 List Grades
数据结构·c++·算法·pat考试
淼淼7632 小时前
工厂方法模式
开发语言·c++·windows·qt·工厂方法模式
Tan_Zhixia2 小时前
时间复杂度判断
数据结构·c++·算法