У меня есть некоторые данные, которые хранятся в отсортированном векторе. Этот вектор отсортирован по некоторому ключу. Я знаю, что в STL есть алгоритм для проверки наличия элемента в этом отсортированном списке. Это означает, что я могу написать что-то вроде этого:
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() );
}
Однако я считаю конструкцию объекта "thingToSearchFor" не элегантной. Есть ли способ лучше? Что-то похожее на это?
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() );
}