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

技术求助:找出Map中对应最多名字的姓氏并输出其名字集合

解决思路与代码修改方案

我来帮你搞定这个问题!其实思路很简单,分两步走就能实现需求:

  • 第一步:确定最大名字数量:先遍历整个map,记录下所有姓氏中对应的名字集合的最大大小
  • 第二步:筛选并输出目标内容:再次遍历map,找出所有名字集合大小等于最大值的姓氏,然后输出对应的名字列表

下面是补全并修改后的完整代码,你可以直接参考:

#include <stdio.h>
#include <iostream>
#include <string>
#include <set>
#include <map>
using namespace std;

typedef set<string> fnset;

int main() {
    map<string, fnset*> lnames;
    // 这里可以替换成你自己的输入逻辑,比如从文件或控制台读取数据
    // 示例数据填充
    lnames["Smith"] = new fnset({"John", "Jane", "Bob"});
    lnames["Johnson"] = new fnset({"Alice", "Mike"});
    lnames["Williams"] = new fnset({"David", "Emma", "Olivia"});

    // 第一步:找出名字集合的最大数量
    size_t max_name_count = 0;
    for (const auto& entry : lnames) {
        if (entry.second->size() > max_name_count) {
            max_name_count = entry.second->size();
        }
    }

    // 第二步:输出所有拥有最多名字的姓氏及对应名字
    cout << "拥有最多名字的姓氏及名字:" << endl;
    for (const auto& entry : lnames) {
        if (entry.second->size() == max_name_count) {
            cout << "* 姓氏:" << entry.first << endl;
            cout << "  名字:";
            bool is_first = true;
            for (const string& name : *entry.second) {
                if (!is_first) {
                    cout << ", ";
                }
                cout << name;
                is_first = false;
            }
            cout << endl;
        }
    }

    // 释放动态分配的内存,避免内存泄漏
    for (auto& entry : lnames) {
        delete entry.second;
    }
    lnames.clear();

    return 0;
}

关键点说明

  • 用size_t类型存储最大数量,因为set::size()返回的是无符号整数,类型匹配更安全
  • 两次遍历的逻辑清晰:第一次只统计最大值,第二次精准筛选目标条目
  • 记得释放fnset的内存,因为你使用了动态分配的指针,避免内存泄漏
  • 如果有多个姓氏拥有相同的最大名字数量,代码会把它们全部输出,不会遗漏

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:35:03