1. 问题分析与需求理解
这道题目描述了一个摩托车厂的库存查询系统需求。作为程序员,我们需要帮助老板明明解决客户订单匹配的效率问题。核心需求可以分解为以下几点:
- 输入处理:程序需要处理多组测试数据,每组包含客户需求(n行)和工厂库存(m行)
- 数据匹配:将客户需求的摩托车型号与工厂库存进行比对
- 结果输出:输出匹配成功的摩托车完整信息(型号、颜色、马达类型),按型号升序排列
- 异常处理:如果没有匹配项,输出"Not found!"
这个问题的本质是一个多对多查找匹配问题,考察的是数据结构的选择和字符串处理能力。在C++中,我们可以使用vector存储数据,通过遍历实现查找,但更高效的方式是使用map或unordered_map。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 数据结构设计与选择
2.1 基础结构体设计
首先需要定义一个结构体来存储摩托车信息:
cpp复制typedef struct Motorcycle {
string id; // 型号
string color; // 颜色
string engine; // 马达类型
} Motorcycle;
2.2 存储方案比较
对于库存数据的存储,有几种可选方案:
-
Vector线性存储:
- 优点:实现简单,内存连续
- 缺点:查找效率O(n),当m较大时性能差
- 适用场景:数据量小(<100),简单场景
-
Map有序存储:
- 优点:自动按key排序,查找效率O(log n)
- 缺点:插入效率略低
- 适用场景:需要有序输出,中等数据量
-
Unordered_map哈希存储:
- 优点:查找效率O(1),最快
- 缺点:无序,需要额外排序输出
- 适用场景:大数据量,纯查找场景
根据题目要求(需要按型号排序输出),map是最合适的选择,它既保证了查找效率,又能自动排序。
3. 核心算法实现
3.1 输入处理优化
原代码使用getline读取后手动分割字符串,这种方法容易出错且代码冗长。我们可以优化为:
cpp复制map<string, pair<str
