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

运行效果:

相关推荐
CYRUS_STUDIO12 分钟前
Frida Hook Native:jobjectArray 参数解析
android·c++·逆向
榆榆欸13 分钟前
4.Socket类、InetAddr类、Epoll类实现模块化
linux·c++·tcp/ip
..过云雨21 分钟前
11. 【C++】模板进阶(函数模板特化、类模板全特化和偏特化、模板的分离编译)
开发语言·c++
BC橡木1 小时前
C++ IO流
c++
m0_555762902 小时前
struct 中在c++ 和c中用法区别
java·c语言·c++
月亮有痕迹诶2 小时前
【C++】智能指针
开发语言·c++·c++11
王禄DUT2 小时前
化学方程式配平 第33次CCF-CSP计算机软件能力认证
开发语言·c++·算法
wuqingshun3141592 小时前
蓝桥杯 XYZ
数据结构·c++·算法·职场和发展·蓝桥杯
DreamByte2 小时前
C++菜鸟教程 - 从入门到精通 第五节
开发语言·c++·算法
长流小哥2 小时前
可视化开发:用Qt实现Excel级动态柱状图
开发语言·c++·qt·ui