#include <iostream>
#include <vector>
#include <cstring>
#include <algorithm>
using namespace std;
class LoopDetectorData
{
char detectorName[ 20 ] ;
public :
LoopDetectorData( const char * str1)
{ strcpy ( detectorName, str1) ; }
friend bool operator== ( const LoopDetectorData & v1, const LoopDetectorData & v2) ;
} ;
bool operator== ( const LoopDetectorData & v1, const LoopDetectorData & v2) {
return strncmp ( v1.detectorName ,v2.detectorName , 20 ) == 0 ;
}
int main( ) {
std:: vector < LoopDetectorData * > Vec_loopDetectors;
Vec_loopDetectors.push_back ( new LoopDetectorData( "abc" ) ) ;
LoopDetectorData * pld= new LoopDetectorData( "def" ) ;
Vec_loopDetectors.push_back ( pld) ;
Vec_loopDetectors.push_back ( new LoopDetectorData( "klm" ) ) ;
const LoopDetectorData * searchFor = new LoopDetectorData( "def" ) ; // different pointer same value
std:: vector < LoopDetectorData * > :: iterator counter = std:: find ( Vec_loopDetectors.begin ( ) , Vec_loopDetectors.end ( ) , searchFor) ;
if ( counter == Vec_loopDetectors.end ( ) )
cout << "Compares pointers value of pointers, not values pointed to. Won't work" << endl;
else cout << "Found pointer" << endl;
auto counter2 = std:: find ( Vec_loopDetectors.begin ( ) , Vec_loopDetectors.end ( ) , pld) ;
if ( counter2 == Vec_loopDetectors.end ( ) )
cout << "Not found ?? " << endl;
else cout << "Found pointer, because this is one that was inserted in vector" << endl;
auto counter3 = std:: find_if ( Vec_loopDetectors.begin ( ) , Vec_loopDetectors.end ( ) , [ & searchFor] ( const LoopDetectorData * f) - > bool { return * f == * searchFor; }
) ;
if ( counter3 == Vec_loopDetectors.end ( ) )
cout << "Not found ??? " << endl;
else cout << "Found because ad-hoc lambda function compares by value" << endl;
return 0 ;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8Y3N0cmluZz4KI2luY2x1ZGUgPGFsZ29yaXRobT4KCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgpjbGFzcyBMb29wRGV0ZWN0b3JEYXRhCnsKICAgIGNoYXIgZGV0ZWN0b3JOYW1lWzIwXTsKcHVibGljOgogICAgTG9vcERldGVjdG9yRGF0YSggY29uc3QgY2hhciAqc3RyMSkgCiAgICAgICAgeyBzdHJjcHkoZGV0ZWN0b3JOYW1lLCBzdHIxKTsgIH0KICAgIGZyaWVuZCBib29sIG9wZXJhdG9yPT0gKGNvbnN0IExvb3BEZXRlY3RvckRhdGEgJnYxLCBjb25zdCBMb29wRGV0ZWN0b3JEYXRhICZ2Mik7Cn07Cgpib29sIG9wZXJhdG9yPT0gKGNvbnN0IExvb3BEZXRlY3RvckRhdGEgJnYxLCBjb25zdCBMb29wRGV0ZWN0b3JEYXRhICZ2MikgewogICAgcmV0dXJuIHN0cm5jbXAodjEuZGV0ZWN0b3JOYW1lLHYyLmRldGVjdG9yTmFtZSwgMjApPT0wOwkKfQoKaW50IG1haW4oKSB7CglzdGQ6OnZlY3RvcjxMb29wRGV0ZWN0b3JEYXRhICo+IFZlY19sb29wRGV0ZWN0b3JzOyAKCVZlY19sb29wRGV0ZWN0b3JzLnB1c2hfYmFjayhuZXcgTG9vcERldGVjdG9yRGF0YSgiYWJjIikpOwoJTG9vcERldGVjdG9yRGF0YSAqcGxkPW5ldyBMb29wRGV0ZWN0b3JEYXRhKCJkZWYiKTsKCVZlY19sb29wRGV0ZWN0b3JzLnB1c2hfYmFjayhwbGQpOwoJVmVjX2xvb3BEZXRlY3RvcnMucHVzaF9iYWNrKG5ldyBMb29wRGV0ZWN0b3JEYXRhKCJrbG0iKSk7CgkKIAljb25zdCBMb29wRGV0ZWN0b3JEYXRhICpzZWFyY2hGb3IgPSBuZXcgTG9vcERldGVjdG9yRGF0YSggImRlZiIgKTsgIC8vIGRpZmZlcmVudCBwb2ludGVyIHNhbWUgdmFsdWUKCXN0ZDo6dmVjdG9yPExvb3BEZXRlY3RvckRhdGEgKj46Oml0ZXJhdG9yIGNvdW50ZXIgPSBzdGQ6OmZpbmQoVmVjX2xvb3BEZXRlY3RvcnMuYmVnaW4oKSwgVmVjX2xvb3BEZXRlY3RvcnMuZW5kKCksIHNlYXJjaEZvcik7CQoJaWYgKGNvdW50ZXIgPT0gVmVjX2xvb3BEZXRlY3RvcnMuZW5kKCkpCgkgICAgY291dCA8PCAiQ29tcGFyZXMgcG9pbnRlcnMgdmFsdWUgb2YgcG9pbnRlcnMsIG5vdCB2YWx1ZXMgcG9pbnRlZCB0by4gV29uJ3Qgd29yayI8PGVuZGw7IAogICAgZWxzZSBjb3V0IDw8IkZvdW5kIHBvaW50ZXIiPDxlbmRsOyAKCiAgICBhdXRvIGNvdW50ZXIyID0gc3RkOjpmaW5kKFZlY19sb29wRGV0ZWN0b3JzLmJlZ2luKCksIFZlY19sb29wRGV0ZWN0b3JzLmVuZCgpLCBwbGQpOwkKCWlmIChjb3VudGVyMiA9PSBWZWNfbG9vcERldGVjdG9ycy5lbmQoKSkKCSAgICBjb3V0IDw8ICJOb3QgZm91bmQgPz8gIjw8ZW5kbDsgCiAgICBlbHNlIGNvdXQgPDwiRm91bmQgcG9pbnRlciwgYmVjYXVzZSB0aGlzIGlzIG9uZSB0aGF0IHdhcyBpbnNlcnRlZCBpbiB2ZWN0b3IiPDxlbmRsOyAKICAgIAogICAgYXV0byBjb3VudGVyMyA9IHN0ZDo6ZmluZF9pZihWZWNfbG9vcERldGVjdG9ycy5iZWdpbigpLCBWZWNfbG9vcERldGVjdG9ycy5lbmQoKSwgWyZzZWFyY2hGb3JdKGNvbnN0IExvb3BEZXRlY3RvckRhdGEgKmYpLT5ib29sIHsgcmV0dXJuICpmID09ICpzZWFyY2hGb3I7IH0KICAgICk7CQoJaWYgKGNvdW50ZXIzID09IFZlY19sb29wRGV0ZWN0b3JzLmVuZCgpKQoJICAgIGNvdXQgPDwgIk5vdCBmb3VuZCA/Pz8gIjw8ZW5kbDsgCiAgICBlbHNlIGNvdXQgPDwiRm91bmQgYmVjYXVzZSBhZC1ob2MgbGFtYmRhIGZ1bmN0aW9uIGNvbXBhcmVzIGJ5IHZhbHVlIjw8ZW5kbDsgCiAgICAKCQoJcmV0dXJuIDA7Cn0=