C++ 如何对指向具有多个条件的类的不同实例的指针向量进行排序?
我需要用这个测试数据对指针向量进行排序 main.cppC++ 如何对指向具有多个条件的类的不同实例的指针向量进行排序?,c++,sorting,oop,C++,Sorting,Oop,我需要用这个测试数据对指针向量进行排序 main.cpp #include "cart.h" int main() { Cart cart; cart.addItem("Desktop", 125.34f); cart.addItem("Iphone", 46.274f); cart.addItem("Pen", 118.99f); cart.addItem("R
#include "cart.h"
int main()
{
Cart cart;
cart.addItem("Desktop", 125.34f);
cart.addItem("Iphone", 46.274f);
cart.addItem("Pen", 118.99f);
cart.addItem("Ruler", 41.34f);
cart.addItem("Printer", 2.99f);
cart.printSortedItems();
cart.destroy();
}
项目.h
#include <string>
#include <tuple>
class Item
{
private:
Item(const std::string& name, const ItemType& itemType, const float& price);
~Item();
std::string m_name;
float m_price;
public:
static Item *getInstance(const std::string& name, const float& price);
bool operator>(const Item& item2) const;
void print() const;
};
#包括
#包括
类项目
{
私人:
项目(常量标准::字符串和名称、常量项目类型和项目类型、常量浮动和价格);
~Item();
std::字符串m_名称;
浮动市价;
公众:
静态项*getInstance(常量std::string和name、常量float和price);
布尔运算符>(常量项和项2)常量;
无效打印()常量;
};
项目1.cpp
#include "item.h"
#include <iostream>
Item::Item(const std::string& name, const float& price)
{
m_name = name;
m_price = price;
}
Item::~Item()
{
}
Item *Item::getInstance(const std::string& name, const float& price)
{
return new Item(name, price);
}
bool Item::operator>(const Item & item2) const
{
if (m_name > item2.m_name) {
return true;
}
if (m_name == item2.m_name && m_price > item2.m_price) {
return true;
}
return false;
}
void Item::print() const
{
std::cout << "Item name: " << m_name << " Item price: "<< m_price << std::endl;
}
#包括“item.h”
#包括
项目::项目(常量标准::字符串和名称、常量浮动和价格)
{
m_name=名称;
m_价格=价格;
}
项目::~Item()
{
}
Item*Item::getInstance(常量std::string和name、常量float和price)
{
返回新项目(名称、价格);
}
布尔项::运算符>(常量项和项2)常量
{
if(m_name>item2.m_name){
返回true;
}
if(m_name==item2.m_name&&m_price>item2.m_price){
返回true;
}
返回false;
}
无效项::print()常量
{
std::你能把指针与项目
s进行比较吗?不是项目
s本身。应该是*m_itemList[i]>*m_itemList[j]
非常感谢,我真的为此感到羞耻!:)
#include <vector>
class Cart
{
public:
Cart();
~Cart();
void addItem(const std::string& name, const float& price);
void printSortedItems();
void sortItems();
void destroy();
private:
std::vector<Item*> m_itemList = {};
};
#include "cart.h"
#include <iostream>
#include <algorithm>
Cart::Cart(){}
Cart::~Cart(){}
void Cart::addItem(const std::string& name, const float& price)
{
Item *newItem = Item::getInstance(name, itemType, price);
m_itemList.push_back(newItem);
}
void Cart::sortItems()
{
for (size_t i = 0; i < m_itemList.size()-1; i++)
{
for (size_t j = i + 1; j < m_itemList.size(); j++)
{
if (m_itemList[i] > m_itemList[j])
{
std::swap(m_itemList[i], m_itemList[j]);
}
}
}
}
void Cart::printSortedItems()
{
sortItems();
std::cout << "Items" << std::endl;
for (size_t i = 0; i < m_itemList.size(); i++)
{
m_itemList[i]->print();
}
std::cout << std::endl;
}
void Cart::destroy()
{
for (size_t i = 0; i < m_itemList.size(); i++)
{
delete m_itemList[i];
m_itemList[i] = nullptr;
}
}