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
相关产品推荐
相关产品推荐

