新手求助 map/set iterator not derederencable

Westlake96 2018-03-01 02:40:32
练习需要编写一个小功能 实现从一个数组中找到出现次数最多的数字 需要使用map容器
我编写完成后编译未出现报错 但是运行出现了map/set iterator not derederencable错误
恳请各位大牛解答一下为何会出此错误 感激不尽


#include "iostream"
#include "map"
#include "algorithm"

struct com_func
{
bool operator()(const map<int, int>::iterator obj1, const map<int, int>::iterator obj2)
{
return obj1->second > obj2->second;
}
};

int get_most_one(int *arrs, int len)
{
map<int, int> count;
for (int i = 0; i < len; i++)
{
count[arrs[i]]++;
}
map<int, int>::iterator fit = max(count.begin(), count.end(), com_func());
return fit->first;
}

int main(int argc, char *argv[])
{
int arr[] = { 1,2,2,1,6,999,9,999,999,2,0,2 };
cout << "most one = " << get_most_one(arr, sizeof(arr) / sizeof(arr[0])) << endl;
return 0;
}

...全文
234 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
Westlake96 2018-03-01
  • 打赏
  • 举报
回复
已经解决 max是取两个元素之间的最大值 而不能取得一个范围内的最大值 需要使用 max_element() 函数 下面是解决代码

#include "iostream"
#include "map"
#include "algorithm"

using namespace std;

struct com_func
{
	bool operator()(pair<int, int> obj1, pair<int, int> obj2)
	{
		return obj1.second < obj2.second;
	}
};

int get_most_one(int *arrs, int len)
{
	map<int, int> count;
	for (int i = 0; i < len; i++)
	{
		count[arrs[i]]++;
	}
	map<int, int>::iterator fit = max_element(count.begin(), count.end(), com_func());
	return fit->first;
}

int main(int argc, char *argv[])
{
	int arr[] = { 1,2,2,1,6,999,9,999,999,2,0,2,999,999 };
	cout << "most one = " << get_most_one(arr, sizeof(arr) / sizeof(arr[0])) << endl;
	return 0;
}
paschen 版主 2018-03-01
  • 打赏
  • 举报
回复
count.end()这个元素不能解引,因为已经越界了,由于标准库用count.end()作为参数调用你com_func的operator()时,你解引了它,导致崩溃

64,639

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧