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

运行效果:

相关推荐
t***54419 小时前
Clang 编译器在 Orwell Dev-C++ 中的局限性
开发语言·c++
yolo_guo20 小时前
redis++使用: hmset 与 hmget
c++·redis
handler0121 小时前
拒绝权限报错!三分钟掌握 Linux 权限管理
linux·c语言·c++·笔记·学习
t***5441 天前
如何在Dev-C++中选择Clang编译器
开发语言·c++
汉克老师1 天前
GESP2023年9月认证C++三级( 第一部分选择题(9-15))
c++·gesp三级·gesp3级
Wave8451 天前
C++继承详解
开发语言·c++·算法
Tairitsu_H1 天前
C++类基础概念:定义、实例化和this指针
开发语言·c++
不想写代码的星星1 天前
C++17 string_view 观察报告:好用,但有点费命
c++
努力努力再努力wz1 天前
【Linux网络系列】深入理解 I/O 多路复用:从 select 痛点到 poll 高并发服务器落地,基于 Poll、智能指针与非阻塞 I/O与线程池手写一个高性能 HTTP 服务器!(附源码)
java·linux·运维·服务器·c语言·c++·python
努力努力再努力wz1 天前
【Linux网络系列】万字硬核解析网络层核心:IP协议到IP 分片重组、NAT技术及 RIP/OSPF 动态路由全景
java·linux·运维·服务器·数据结构·c++·python