求助在C++ algorithm 中 max_element和min_element 问题?

一个复数(x+iy)集合,两种操作作用在该集合上: 1、Pop 表示读出集合中复数模值最大的那个复数,如集合为空 输出 empty ,不为空就输出最大的那个复数并且从集合中删除那个复数,再输出集合的大小SIZE; 2 Insert a+ib 指令(a,b表示实部和虚部),将a+ib加入到集合中 ,输出集合的大小SIZE; 最开始要读入一个int n,表示接下来的n行每一行都是一条命令。
示例输入:
3
Pop
Insert 1+i2
Pop
示例输出:
empty
SIZE = 1
1+i2
SIZE = 0

我想用algorithm中的max_element来找出Pop的复数值,并且使用自定义谓词:
bool MAX(Com Ca,Com Cb)//Com是两个复数
{
if((Ca.R*Ca.R+Ca.I*Ca.I)>(Cb.R*Cb.R+Cb.I*Cb.I))//判断模长
return true;
else if(Ca.R*Ca.R+Ca.I*Ca.I==Cb.R*Cb.R+Cb.I*Cb.I)//在模长相等的时候,判断虚部
{
if(Ca.I<Cb.I)
return true;
}
return false;
}

但是没有accepted,我把max_element改成了min_element,结果对了。

问:为什么max_element是错的,而min_element是对的?

使用max_element时,没通过的测试用例:

输入:88 Insert 407+i235 Insert 242+i490 Pop ……

正确输出:
SIZE = 1
SIZE = 2
242+i490
SIZE = 1
实际:
SIZE = 1
SIZE = 2
407+i235
SIZE = 1

喵喔喔
浏览 269回答 2
2回答

慕哥6287543

max_element和min_element比较函数让你判断左边是不是比右边小。你返回左边是不是比右边大,自然只能反过来用了。

ibeautiful

可以用max和min
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java
Html5