Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/153.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何对指向具有多个条件的类的不同实例的指针向量进行排序?_C++_Sorting_Oop - Fatal编程技术网

C++ 如何对指向具有多个条件的类的不同实例的指针向量进行排序?

C++ 如何对指向具有多个条件的类的不同实例的指针向量进行排序?,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

我需要用这个测试数据对指针向量进行排序

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