C++ stack queue priority_element
班上有10个学生,我想知道分数排在倒数第4名的学生。
如果要满足上述需求,可以用sort排好序,然后取第4位(因为是由小到大排),更聪明的朋友会用partial_sort,只排前4位,然后得到第4位。其实这是你还是浪费,因为前两位你根本没有必要排序,此时,你就需要nth_element:
template<classRandomAccessIterator>
voidnth_element(RandomAccessIteratorfirst,RandomAccessIteratornth,
RandomAccessIteratorlast);
template<classRandomAccessIterator,classStrictWeakOrdering>
voidnth_element(RandomAccessIteratorfirst,RandomAccessIteratornth,
RandomAccessIteratorlast,StrictWeakOrderingcomp);
对于上述实例需求,你只需要按下面要求修改1.4中的程序:
stable_sort(vect.begin(),vect.end(),less<student>());
替换为:
nth_element(vect.begin(),vect.begin()+3,vect.end(),less<student>());
运行结果为:
------beforesort...
Tom:74
Jimy:56
Mary:92
Jessy:85
Jone:56
Bush:52
Winter:77
Andyer:63
Lily:76
Maryia:89
-----aftersort....
Jone:56
Bush:52
Jimy:56
Andyer:63
Jessy:85
Mary:92
Winter:77
Tom:74
Lily:76
Maryia:89
第四个是谁?Andyer,这个倒霉的家伙。为什么是begin()+3而不是+4?我开始写这篇文章的时候也没有在意,后来在ilovevc的提醒下,发现了这个问题。begin()是第一个,begin()+1是第二个,...begin()+3当然就是第四个了。