c++ - 如何对指向具有多个条件的类的不同实例的指针向量进行排序?
问题描述
我需要用这个测试数据对一个指针向量进行排序。
主文件
#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;
};
项目.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;
}
购物车.h
#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 = {};
};
购物车.cpp
#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;
}
}
在函数Cart::sortItems()
中,我比较m_itemList[i]
和m_itemList[j]
,它们都是指向实例的指针Item
。理论上,如果我在 中设置一个断点bool Item::operator>(const Item & item2) const
,它应该被击中。但是在这种情况下,没有命中断点,因此排序后的结果是错误的。你们能告诉我我哪里错了吗?
解决方案
推荐阅读
- bash - 让 gitlab 工作不等待“脚本”部分的任何返回
- python - 在数据python中用nans计算3个数组的加权平均值
- javascript - 方法测量模拟期间代理未使用的时间
- c# - 我想在 C# 表单应用程序的列表框中打印 C++ 向量的元素
- python - 如何在 Paramiko 库中配置首选密码
- arrays - 在c中访问动态数组的每个元素
- vbscript - 使用 VBScript 递归检查复制项目到新目标的文件和文件夹
- python - 从异常对象中提取完整跟踪
- c++ - 如何使用 CMake 将 Go 代码编译并链接到 c++ 中
- database - 我什么时候应该在普通后端逻辑上使用数据库挂钩?