#include <iostream>
#include <vector>
#include <algorithm>
struct element_t {
int val;
bool visited;
} ;
bool cmp( const element_t& lhs, const element_t& rhs)
{
if ( ! lhs.visited && ! rhs.visited ) return ( lhs.val < rhs.val ) ;
return lhs.visited ? rhs.visited : true ;
/* alternatively:
return (lhs.visited || rhs.visited)
? rhs.visited
: (lhs.val < rhs.val);
*/
/* alternatively:
return (!lhs.visited) && (rhs.visited || lhs.val < rhs.val);
*/
}
int main( )
{
std:: vector < element_t> vct_priority{
{ 1 ,true } ,
{ 0 ,true } ,
{ 1 ,false } ,
{ 0 ,true } ,
{ 2 ,false } ,
{ 2147483647 ,false } ,
{ 2147483647 ,false } ,
{ 0 ,true } ,
{ 1 ,false } ,
{ 0 ,true } ,
{ 2 ,false } ,
{ 2147483647 ,false } ,
{ 1 ,false }
} ;
do
{
auto it = std:: min_element ( std:: begin ( vct_priority) , std:: end ( vct_priority) , cmp) ;
if ( it == std:: end ( vct_priority) || it- > visited) break ;
auto indx_smallest = std:: distance ( std:: begin ( vct_priority) , it) ;
std:: cout << "index " << indx_smallest << ", value " << it- > val << std:: endl ;
it- > visited = true ;
}
while ( true ) ;
std:: cout << "done" << std:: endl ;
return 0 ;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8YWxnb3JpdGhtPgoKc3RydWN0IGVsZW1lbnRfdCB7CiAgICBpbnQgdmFsOwogICAgYm9vbCB2aXNpdGVkOwp9OwoKYm9vbCBjbXAoY29uc3QgZWxlbWVudF90JiBsaHMsIGNvbnN0IGVsZW1lbnRfdCYgcmhzKQp7CiAgICBpZiAoIWxocy52aXNpdGVkICYmICFyaHMudmlzaXRlZCkgcmV0dXJuIChsaHMudmFsIDwgcmhzLnZhbCk7CiAgICByZXR1cm4gbGhzLnZpc2l0ZWQgPyByaHMudmlzaXRlZCA6IHRydWU7CgoJLyogYWx0ZXJuYXRpdmVseToKICAgIHJldHVybiAobGhzLnZpc2l0ZWQgfHwgcmhzLnZpc2l0ZWQpCiAgICAgICAgPyByaHMudmlzaXRlZAogICAgICAgIDogKGxocy52YWwgPCByaHMudmFsKTsKCSovCgoJLyogYWx0ZXJuYXRpdmVseToKCXJldHVybiAoIWxocy52aXNpdGVkKSAmJiAocmhzLnZpc2l0ZWQgfHwgbGhzLnZhbCA8IHJocy52YWwpOwoJKi8KfQoKaW50IG1haW4oKQp7CglzdGQ6OnZlY3RvcjxlbGVtZW50X3Q+IHZjdF9wcmlvcml0eXsKCQl7MSx0cnVlfSwKCQl7MCx0cnVlfSwKCQl7MSxmYWxzZX0sCgkJezAsdHJ1ZX0sCgkJezIsZmFsc2V9LAoJCXsyMTQ3NDgzNjQ3LGZhbHNlfSwKCQl7MjE0NzQ4MzY0NyxmYWxzZX0sCgkJezAsdHJ1ZX0sCgkJezEsZmFsc2V9LAoJCXswLHRydWV9LAoJCXsyLGZhbHNlfSwKCQl7MjE0NzQ4MzY0NyxmYWxzZX0sCgkJezEsZmFsc2V9Cgl9OwoKCWRvCgl7CgkJYXV0byBpdCA9IHN0ZDo6bWluX2VsZW1lbnQoc3RkOjpiZWdpbih2Y3RfcHJpb3JpdHkpLCBzdGQ6OmVuZCh2Y3RfcHJpb3JpdHkpLCBjbXApOwoJCWlmIChpdCA9PSBzdGQ6OmVuZCh2Y3RfcHJpb3JpdHkpIHx8IGl0LT52aXNpdGVkKSBicmVhazsKCQlhdXRvIGluZHhfc21hbGxlc3QgPSBzdGQ6OmRpc3RhbmNlKHN0ZDo6YmVnaW4odmN0X3ByaW9yaXR5KSwgaXQpOwoJCXN0ZDo6Y291dCA8PCAiaW5kZXggIiA8PCBpbmR4X3NtYWxsZXN0IDw8ICIsIHZhbHVlICIgPDwgaXQtPnZhbCA8PCBzdGQ6OmVuZGw7CgkJaXQtPnZpc2l0ZWQgPSB0cnVlOwoJfQoJd2hpbGUgKHRydWUpOwoKCXN0ZDo6Y291dCA8PCAiZG9uZSIgPDwgc3RkOjplbmRsOwoJcmV0dXJuIDA7Cn0=