1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
|
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
struct person
{
int id = 0 ;
std::string name ;
// equal if both name and id match
// you may want to make the name comparison case-insensitive
friend bool operator== ( const person& a, const person& b )
{ return a.id == b.id && a.name == b.name ; }
friend bool operator!= ( const person& a, const person& b )
{ return !(a==b) ; }
};
int main()
{
const std::vector<person> people { { 26, "Athos" }, { 12, "Porthos" }, { 19, "Aramis" } } ;
// find by both id and name
// http://en.cppreference.com/w/cpp/algorithm/find
const auto iter = std::find( std::begin(people), std::end(people), person{ 12, "Porthos" } ) ;
if( iter != std::end(people) ) std::cout << "{ 19, \"Aramis\" } found at position " << iter - std::begin(people) << '\n' ;
// find by id
const int id = 19 ;
const auto iter2 = std::find_if( std::begin(people), std::end(people),
[id]( const person& p ) { return p.id == id ; } ) ;
// http://www.stroustrup.com/C++11FAQ.html#lambda
if( iter != std::end(people) ) std::cout << "id " << id << " found at position " << iter2 - std::begin(people) << '\n' ;
// find by name
const std::string name = "Athos" ;
const auto iter3 = std::find_if( std::begin(people), std::end(people),
[&name]( const person& p ) { return p.name == name ; } ) ;
if( iter != std::end(people) ) std::cout << "name '" << name << "' found at position " << iter3 - std::begin(people) << '\n' ;
}
|