I have some data that is stored in a sorted vector. This vector is sorted by some key. I know the STL has an algorithm for checking if an element is in this sorted list. This means I can write something like this:
struct MyData { int key; OtherData data; };
struct MyComparator
{
bool operator()( const MyData & d1, const MyData & d2 ) const
{
return d1.key < d2.key;
}
};
bool isKeyInVector( int key, const std::vector<MyData> &v )
{
MyData thingToSearchFor;
thingToSearchFor.key = key;
return std::binary_search( v.begin(), v.end(), thingToSearchFor, MyComparator() );
}
However I find the construction of the "thingToSearchFor" object inelegant. Is there a better way? Something similar to this?
struct MyComparator2
{
bool operator()( const MyData & d1, const MyData & d2 ) const
{
return d1.key < d2.key;
}
};
bool isKeyInVector2( int key, const std::vector<MyData> &v )
{
return std::binary_search( v.begin(), v.end(), key, MyComparator2() );
}
Do:
struct MyComparator
{
bool operator()(int d1, const MyData & d2) const
{
return d1 < d2.key;
}
bool operator()(const MyData & d1, int d2) const
{
return d1.key < d2;
}
};
The predicate is called like pred(value, ...) or pred(..., value), so just take in the value directly.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With