You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在基于结构体内整数排序时显示更多结构体信息

解决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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 10:03:00