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

C++统计数组出现至少2次元素个数map实现报错求助

报错原因
  • 核心编译错误:std::map迭代器解引用后是pair<const int, int>类型,存储键值对数据,你直接将该类型对象与m.size()返回的整数做相等判断,类型不匹配触发编译报错。
  • 其他逻辑/规范问题:
    • if判断语句末尾多余的分号会导致即使条件成立,也不会执行任何后续逻辑
    • int arr[n]属于GCC独有的变长数组扩展,不符合C++标准,可移植性差
    • 缺少核心的元素次数统计、结果计算逻辑
正确实现方案

使用map存储每个元素的出现次数,遍历完成后统计次数≥2的元素数量即可,完整代码如下:

#include <iostream>
#include <map>

using namespace std;

int main() {
    int n;
    cin >> n;
    map<int, int> cnt;
    // 统计每个元素出现次数
    for (int i = 0; i < n; ++i) {
        int num;
        cin >> num;
        cnt[num]++;
    }
    // 统计符合要求的元素个数
    int ans = 0;
    for (auto& item : cnt) {
        if (item.second >= 2) {
            ans++;
        }
    }
    cout << ans << endl;
    return 0;
}

如果你的编译环境不支持C++11及以上版本,可将遍历部分替换为迭代器写法:

map<int, int>::iterator it;
for (it = cnt.begin(); it != cnt.end(); ++it) {
    if (it->second >= 2) {
        ans++;
    }
}
效果验证

输入示例4 1 2 2 3时,程序输出为1,完全匹配需求要求的结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 23:24:03