вы должны предоставить информацию binary_search()
, чтобы сказать ему, как сравнить свои объекты. Два наиболее распространенных способа: либо добавить operator<()
в struct
, если это возможно, либо предоставить вспомогательную функцию, которая может сравнивать два struct
с.
Первая форма будет выглядеть примерно так:
struct Main {
int mainID ;
string mainDIV ;
string mainNAME ;
bool operator<(const Main & other) const
{
return mainID < other.mainID ;
}
}
Это будет сравнивать только на на mainID
, но вы можете расширить его оттуда.
Кроме того, это только учит компилятору, как сравнивать два struct Main
, в то время как ответ Барри выше будет соответствовать int и struct Main
. Но давайте продолжим этот ответ.
Теперь, чтобы найти запись для 5
, мы должны сделать это в struct Main
:
struct Main search_key = { 5 } ;
bool yes = std::binary_search(v.begin(), v.end(), search_key) ;
Теперь, это не очень элегантно, и к тому же, если у вас есть конструктор для struct Main
(и гаванью» t положите его в свой пример), это даже не сработает. Поэтому мы добавляем еще один конструктор только для int
.
struct Main
{
Main(int id, const string & a_div, const string & a_name) : id(id), div(a_div), name(a_name) { }
Main(int id) : id(id) { }
int id ;
string div, name ;
bool operator<(const Main &o) const { return id < o.id ; }
} ;
Теперь мы можем сделать немного короче вид:
bool has_3 = std::binary_search(v.begin(), v.end(), Main(3)) ;
Историческая справка: Бьярне пытается в течение некоторого времени, чтобы получить операторы сравнения по умолчанию в стандарте, но не все были взволнованы на совещаниях по стандартам. Хотя на последнем собрании был некоторый прогресс, и, возможно, это может появиться, когда C++ 17 - это вещь.
2-й метод: http://en.cppreference.com/w/cpp/algorithm/binary_search –
Я не знаю, являюсь ли я глупо. Но ссылка вообще не помогла. – user3706129