当前位置: 首页 > news >正文

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

运行效果:

在这里插入图片描述

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 从阻塞来聊聊mysql的 排他锁 共享锁 mvcc乐观锁;间隙锁;
  • 目标检测之数据增强
  • 探索Ubuntu网络监控:安装与使用流行工具的指南
  • 外部排序(败者树、置换-选择排序、最佳归并树)
  • Xilinx FPGA在线升级——汇总
  • <keep-alive> 一分钟了解
  • Datawhale-动手学CV-Pytorch-MNIST分类实战代码解读
  • 浏览器后门:保护影子 IT 的新前线
  • JAVA maven pom下载失败问题处理
  • 代码设计:设计模式:中介者模式
  • idea鼠标悬浮显示注释
  • Table API SQL的概念和通用API
  • 具有重新参数化异构卷积的多分支辅助融合YOLO,用于精确的目标检测(MAF-YOLO)
  • Spring——IOC/DI思想
  • 打造编程学习的“知识宝库”:解锁高效笔记记录与整理的秘籍
  • 【个人向】《HTTP图解》阅后小结
  • Intervention/image 图片处理扩展包的安装和使用
  • Java 多线程编程之:notify 和 wait 用法
  • Java读取Properties文件的六种方法
  • leetcode388. Longest Absolute File Path
  • vue2.0开发聊天程序(四) 完整体验一次Vue开发(下)
  • 安装python包到指定虚拟环境
  • 笨办法学C 练习34:动态数组
  • 大快搜索数据爬虫技术实例安装教学篇
  • 给新手的新浪微博 SDK 集成教程【一】
  • 记录一下第一次使用npm
  • 前端路由实现-history
  • 融云开发漫谈:你是否了解Go语言并发编程的第一要义?
  • 如何设计一个微型分布式架构?
  • 微信公众号开发小记——5.python微信红包
  • hi-nginx-1.3.4编译安装
  • PostgreSQL 快速给指定表每个字段创建索引 - 1
  • ​​​​​​​​​​​​​​Γ函数
  • ​ubuntu下安装kvm虚拟机
  • ### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLTr
  • #### golang中【堆】的使用及底层 ####
  • #pragma pack(1)
  • #经典论文 异质山坡的物理模型 2 有效导水率
  • $emit传递多个参数_PPC和MIPS指令集下二进制代码中函数参数个数的识别方法
  • (done) 两个矩阵 “相似” 是什么意思?
  • (webRTC、RecordRTC):navigator.mediaDevices undefined
  • (二)Eureka服务搭建,服务注册,服务发现
  • (二)丶RabbitMQ的六大核心
  • (二刷)代码随想录第16天|104.二叉树的最大深度 559.n叉树的最大深度● 111.二叉树的最小深度● 222.完全二叉树的节点个数
  • (个人笔记质量不佳)SQL 左连接、右连接、内连接的区别
  • (免费领源码)python#django#mysql校园校园宿舍管理系统84831-计算机毕业设计项目选题推荐
  • (南京观海微电子)——I3C协议介绍
  • (十五)devops持续集成开发——jenkins流水线构建策略配置及触发器的使用
  • (算法)硬币问题
  • (小白学Java)Java简介和基本配置
  • (一) springboot详细介绍
  • (一)使用Mybatis实现在student数据库中插入一个学生信息
  • (原)本想说脏话,奈何已放下
  • (转)winform之ListView
  • .NET Core 2.1路线图