#include <iostream>
#include <list>
#include <algorithm>
using namespace std;
using sample = std:: pair < unsigned , double > ;
std:: ostream & operator<< ( std:: ostream & ostr, const std:: list < sample> & list)
{
for ( auto & i : list) {
ostr << "<" << i.first << "," << i.second << "> " ; }
return ostr;
}
int main( ) {
sample a{ 1 ,12.2 } ;
sample b{ 2 ,11.778 } ;
sample c{ 3 ,9.2 } ;
sample d{ 4 ,- 2.6 } ;
sample e{ 5 ,10.1 } ;
std:: list < sample> samples{ d,c,b,a } ;
cout << "list is: " << samples << endl << endl;
double maxval = - std:: numeric_limits < double > :: infinity ( ) ;
unsigned cutoff = 2 ;
samples.remove_if ( [ & maxval,cutoff] ( sample s)
{
//if older than cutoff, remove
if ( s.first < cutoff) return true ;
//otherwise, keep and update max
maxval = std:: max ( maxval, s.second ) ;
return false ;
} ) ;
cout << "max is: " << maxval << ", list is: " << samples << endl << endl;
samples.push_front ( e) ;
maxval = - std:: numeric_limits < double > :: infinity ( ) ;
samples.remove_if ( [ & maxval, cutoff] ( sample s)
{
if ( s.first < cutoff) return true ;
maxval = std:: max ( maxval, s.second ) ;
return false ;
} ) ;
cout << "max is: " << maxval << ", list is: " << samples << endl << endl;
maxval = - std:: numeric_limits < double > :: infinity ( ) ;
cutoff = 3 ;
samples.remove_if ( [ & maxval,cutoff] ( sample s)
{
if ( s.first < cutoff) return true ;
maxval = std:: max ( maxval, s.second ) ;
return false ;
} ) ;
cout << "max is: " << maxval << ", list is: " << samples << endl << endl;
return 0 ;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8bGlzdD4KI2luY2x1ZGUgPGFsZ29yaXRobT4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnVzaW5nIHNhbXBsZSA9IHN0ZDo6cGFpcjx1bnNpZ25lZCwgZG91YmxlPjsKCnN0ZDo6b3N0cmVhbSYgb3BlcmF0b3I8PChzdGQ6Om9zdHJlYW0mIG9zdHIsIGNvbnN0IHN0ZDo6bGlzdDxzYW1wbGU+JiBsaXN0KQp7Cglmb3IgKGF1dG8gJmkgOiBsaXN0KSB7CgkJb3N0ciA8PCAiPCIgPDwgaS5maXJzdCA8PCAiLCIgPDwgaS5zZWNvbmQgPDwgIj4gIjsJfQoJcmV0dXJuIG9zdHI7Cn0KCmludCBtYWluKCkgewoJCglzYW1wbGUgYXsgMSwxMi4yIH07CglzYW1wbGUgYnsgMiwxMS43NzggfTsKCXNhbXBsZSBjeyAzLDkuMiB9OwoJc2FtcGxlIGR7IDQsLTIuNiB9OwoJc2FtcGxlIGV7IDUsMTAuMSB9OwoKCXN0ZDo6bGlzdDxzYW1wbGU+IHNhbXBsZXN7IGQsYyxiLGEgfTsKCWNvdXQgPDwgImxpc3QgaXM6ICIgPDwgc2FtcGxlcyA8PCBlbmRsIDw8IGVuZGw7CgoJZG91YmxlIG1heHZhbCA9IC1zdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OmluZmluaXR5KCk7Cgl1bnNpZ25lZCBjdXRvZmYgPSAyOwoJc2FtcGxlcy5yZW1vdmVfaWYoWyZtYXh2YWwsY3V0b2ZmXShzYW1wbGUgcykgCgl7CiAgICAgICAgLy9pZiBvbGRlciB0aGFuIGN1dG9mZiwgcmVtb3ZlCiAgICAgICAgaWYgKHMuZmlyc3QgPCBjdXRvZmYpIHJldHVybiB0cnVlOwogICAgICAgIC8vb3RoZXJ3aXNlLCBrZWVwIGFuZCB1cGRhdGUgbWF4CiAgICAgICAgbWF4dmFsID0gc3RkOjptYXgobWF4dmFsLCBzLnNlY29uZCk7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfSk7Cgljb3V0IDw8ICJtYXggaXM6ICIgPDwgbWF4dmFsIDw8ICIsIGxpc3QgaXM6ICIgPDwgc2FtcGxlcyA8PCBlbmRsIDw8IGVuZGw7CgoJc2FtcGxlcy5wdXNoX2Zyb250KGUpOwoJbWF4dmFsID0gLXN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6aW5maW5pdHkoKTsKCXNhbXBsZXMucmVtb3ZlX2lmKFsmbWF4dmFsLCBjdXRvZmZdKHNhbXBsZSBzKQoJewoJCWlmIChzLmZpcnN0IDwgY3V0b2ZmKSByZXR1cm4gdHJ1ZTsKCQltYXh2YWwgPSBzdGQ6Om1heChtYXh2YWwsIHMuc2Vjb25kKTsKCQlyZXR1cm4gZmFsc2U7Cgl9KTsKCWNvdXQgPDwgIm1heCBpczogIiA8PCBtYXh2YWwgPDwgIiwgbGlzdCBpczogIiA8PCBzYW1wbGVzIDw8IGVuZGwgPDwgZW5kbDsKCgltYXh2YWwgPSAtc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjppbmZpbml0eSgpOwoJY3V0b2ZmID0gMzsKCXNhbXBsZXMucmVtb3ZlX2lmKFsmbWF4dmFsLGN1dG9mZl0oc2FtcGxlIHMpIAoJewoJCWlmIChzLmZpcnN0IDwgY3V0b2ZmKSByZXR1cm4gdHJ1ZTsKCQltYXh2YWwgPSBzdGQ6Om1heChtYXh2YWwsIHMuc2Vjb25kKTsKCQlyZXR1cm4gZmFsc2U7Cgl9KTsKCWNvdXQgPDwgIm1heCBpczogIiA8PCBtYXh2YWwgPDwgIiwgbGlzdCBpczogIiA8PCBzYW1wbGVzIDw8IGVuZGwgPDwgZW5kbDsKCglyZXR1cm4gMDsKfQ==
stdout
list is: <4,-2.6> <3,9.2> <2,11.778> <1,12.2>
max is: 11.778, list is: <4,-2.6> <3,9.2> <2,11.778>
max is: 11.778, list is: <5,10.1> <4,-2.6> <3,9.2> <2,11.778>
max is: 10.1, list is: <5,10.1> <4,-2.6> <3,9.2>