需求:使用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;
}