You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

C++实现:统计唯一客户数量并输出客户累计消费金额

嘿,这个需求其实用C++里的关联容器就能轻松搞定,我给你捋清楚步骤和代码示例:

核心思路

我们可以用std::map或者std::unordered_map来存储客户姓名和累计消费金额——这两个容器会自动帮我们处理重复的客户姓名,不需要手动去重:

  • std::map会按姓名的字典序排序存储,适合需要有序输出的场景
  • std::unordered_map是哈希实现,插入和查找的效率更高,适合数据量较大的情况

具体步骤很简单:

  1. 遍历两个数组的对应元素,把每个客户的消费金额累加到容器中对应的键值上
  2. 遍历容器,就能直接得到唯一客户数量(容器的size()方法)和每位客户的累计消费
完整代码示例
#include <iostream>
#include <vector>
#include <unordered_map> // 如果想用有序的map,替换成#include <map>即可

int main() {
    // 示例输入数组
    std::vector<std::string> customerNames = {"peter", "mary", "peter", "may", "edward", "edward"};
    std::vector<int> amounts = {300, 400, 500, 300, 400, 500};

    // 用unordered_map存储累计消费,键是客户姓名,值是累计金额
    std::unordered_map<std::string, int> customerTotal;

    // 遍历数组,累加消费金额
    for (size_t i = 0; i < customerNames.size(); ++i) {
        // 如果客户不存在,会自动插入默认值0,然后加上当前金额;如果存在则直接累加
        customerTotal[customerNames[i]] += amounts[i];
    }

    // 输出唯一客户数量
    std::cout << "唯一客户数量:" << customerTotal.size() << std::endl;
    std::cout << "------------------------" << std::endl;

    // 输出每位客户的累计消费
    for (const auto& pair : customerTotal) {
        std::cout << "客户 " << pair.first << " 的累计消费金额:" << pair.second << std::endl;
    }

    return 0;
}
代码说明
  • 我们用std::vector来存储输入的姓名和金额数组,也可以用普通数组,不过vector更灵活
  • 遍历的时候用size_t作为循环变量,避免数组越界的类型警告
  • 当我们访问customerTotal[customerNames[i]]时,如果这个客户还没在map里,容器会自动创建一个键值对,值初始化为0,然后加上当前的消费金额;如果已经存在,就直接累加

如果需要按姓名排序输出,只需要把std::unordered_map替换成std::map就行,其他代码不需要改动。

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

火山引擎 最新活动