You need to enable JavaScript to run this app. C++如何实现vector中重复fruit_name查找与quantity合并?
优惠活动
大模型
产品
解决方案
定价
更多

C++如何实现vector中重复fruit_name查找与quantity合并?

重复水果条目合并实现方案

核心实现思路

  • 以水果名称为唯一标识做分组遍历,同名条目累计重量值
  • 同名称水果直接保留首次出现的单价,不做覆盖
  • 输出格式和原数据保持列对齐

现存代码问题修正

你当前的文件读取逻辑存在无效条目冗余问题:循环内先无判断执行push_back,再执行数据读取,当读到文件末尾触发EOF标记时,最后一次读取的内容为空,会导致vector末尾多一个无效的空结构体对象。实现时会先修正这个逻辑。

合并逻辑说明

这里使用std::map做水果名称到合并结果的映射,它本身会自动按水果名称的字典序排序,无需额外编写排序代码,刚好匹配示例输出的排序风格

完整实现代码

#include <vector>
#include <fstream>
#include <map>
#include <cstdio>
#include <string>

// 自定义宏值,和你原有定义保持一致
#define MAX_LENGTH 32
struct fruit_t
{
    char fruit_name[MAX_LENGTH];  // 水果名称
    float quantity; // 重量,单位为磅
    float price;          // 水果单价
};

int main() {
    vector<fruit_t> fruit;
    ifstream inFile;
    inFile.open("list1.txt");
    fruit_t temp_item;
    // 修正后的读取逻辑:读入三个值全部成功才存入vector,避免无效条目
    while (inFile >> temp_item.fruit_name >> temp_item.quantity >> temp_item.price) {
        fruit.push_back(temp_item);
    }
    inFile.close();

    // 合并逻辑核心
    map<string, fruit_t> merged_result;
    for (const auto& item : fruit) {
        // 用水果名称字符串作为map的键
        string name_key(item.fruit_name);
        // 首次遇到该水果,直接存入映射表
        if (merged_result.count(name_key) == 0) {
            merged_result[name_key] = item;
        } else {
            // 重复条目直接累加重量
            merged_result[name_key].quantity += item.quantity;
        }
    }

    // 对齐格式输出结果
    printf("%-20s %-10s %-10s\n", "fruit_name", "quantity", "price");
    for (const auto& res : merged_result) {
        printf("%-20s %-10.2f %-10.2f\n", 
               res.second.fruit_name, 
               res.second.quantity, 
               res.second.price);
    }
    return 0;
}

计算结果验证

代入你提供的原始测试数据,输出数值和示例完全匹配:

  • 累计apples_gala三次重量:1.80 + 3.00 + 1.45 = 6.25,单价保持1.21不变
  • 累计oranges_honeybell两次重量:4.20 + 4.22 = 8.42,单价保持1.08不变
  • 其余无重复名称的水果直接保留原有数值

可选优化方向

  • 不需要按名称字典序排序的场景,可以把map替换为unordered_map,平均查找效率从O(logn)提升到O(1),处理大文件时性能更好
  • 原代码中未使用的count、i变量可以直接删除,减少冗余逻辑

内容的提问来源于stack exchange,提问作者An Phan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.06 14:24:03