如何在基于结构体内整数排序时显示更多结构体信息
解决Stock结构体按销量关联显示名称和价格的问题
嗨,我来帮你搞定这个问题!你已经能找到Stock结构体里最大的iSold值了,现在要同步展示对应的商品名称(sName)和价格(fPrice),核心思路其实很简单:不要只记录最大的销量数值,而是保存对应的整个结构体实例。下面给你几种实用的实现方式:
首先,先补全你的Stock结构体(假设缺失的字段是价格和销量):
struct Stock { string sName = ""; float fPrice = 0.0f; int iSold = 0; // 销量字段 };
方法一:遍历直接记录最大销量的结构体
这种方法不需要排序,一次遍历就能找到目标项,时间复杂度O(n),效率最高:
#include "stdafx.h" #include <iostream> #include <conio.h> #include <string> #include <vector> using namespace std; struct Stock { string sName = ""; float fPrice = 0.0f; int iSold = 0; }; int main() { // 示例库存数据 vector<Stock> stocks = { {"苹果", 5.99, 120}, {"香蕉", 2.49, 200}, {"橙子", 3.99, 150} }; if (stocks.empty()) { cout << "暂无库存数据!" << endl; _getch(); return 0; } // 初始化最大销量项为第一个元素 Stock maxSoldStock = stocks[0]; // 遍历所有库存,更新最大销量项 for (const auto& stock : stocks) { if (stock.iSold > maxSoldStock.iSold) { maxSoldStock = stock; } } // 输出完整信息 cout << "销量最高的商品信息:" << endl; cout << "名称:" << maxSoldStock.sName << endl; cout << "价格:" << maxSoldStock.fPrice << "元" << endl; cout << "销量:" << maxSoldStock.iSold << "件" << endl; _getch(); return 0; }
方法二:排序后取最大项(适合需要全列表排序的场景)
如果你不仅要找最大销量的商品,还希望把所有库存按销量排序,那可以用C++标准库的sort函数,自定义排序规则:
#include "stdafx.h" #include <iostream> #include <conio.h> #include <string> #include <vector> #include <algorithm> // 需包含algorithm头文件 using namespace std; struct Stock { string sName = ""; float fPrice = 0.0f; int iSold = 0; }; int main() { vector<Stock> stocks = { {"苹果", 5.99, 120}, {"香蕉", 2.49, 200}, {"橙子", 3.99, 150} }; if (stocks.empty()) { cout << "暂无库存数据!" << endl; _getch(); return 0; } // 按销量降序排序(大的在前) sort(stocks.begin(), stocks.end(), [](const Stock& a, const Stock& b) { return a.iSold > b.iSold; }); // 销量最高的就是排序后的第一个元素 const Stock& maxSoldStock = stocks[0]; cout << "销量最高的商品信息:" << endl; cout << "名称:" << maxSoldStock.sName << endl; cout << "价格:" << maxSoldStock.fPrice << "元" << endl; cout << "销量:" << maxSoldStock.iSold << "件" << endl; // 可选:输出所有排序后的库存 cout << "\n所有库存按销量降序排列:" << endl; for (const auto& stock : stocks) { cout << stock.sName << " | 价格:" << stock.fPrice << "元 | 销量:" << stock.iSold << "件" << endl; } _getch(); return 0; }
方法三:用max_element算法(简洁的找最大值方式)
C++标准库提供了max_element函数,可以直接找到符合条件的最大元素,代码更简洁:
#include "stdafx.h" #include <iostream> #include <conio.h> #include <string> #include <vector> #include <algorithm> using namespace std; struct Stock { string sName = ""; float fPrice = 0.0f; int iSold = 0; }; int main() { vector<Stock> stocks = { {"苹果", 5.99, 120}, {"香蕉", 2.49, 200}, {"橙子", 3.99, 150} }; if (stocks.empty()) { cout << "暂无库存数据!" << endl; _getch(); return 0; } // 找到销量最大的元素迭代器 auto maxIter = max_element(stocks.begin(), stocks.end(), [](const Stock& a, const Stock& b) { return a.iSold < b.iSold; // 比较规则:a的销量小于b时,a排在b前面,最终返回最大的元素 }); const Stock& maxSoldStock = *maxIter; cout << "销量最高的商品信息:" << endl; cout << "名称:" << maxSoldStock.sName << endl; cout << "价格:" << maxSoldStock.fPrice << "元" << endl; cout << "销量:" << maxSoldStock.iSold << "件" << endl; _getch(); return 0; }
总结
- 如果只需要找最大销量的单项,优先用方法一或方法三,效率更高;
- 如果需要对整个库存列表按销量排序,就用方法二;
- 核心逻辑都是保存整个
Stock结构体,而不是单独的iSold数值,这样就能直接访问它的所有关联字段了。
内容的提问来源于stack exchange,提问作者Daniel Park
相关产品推荐
相关产品推荐

