Ich versuche, eine binary_search mit einem Vektor von ganzzahligen Paaren und einer ganzen Zahl zu tun, wie folgt:binary_search mit std :: Paar mit einem benutzerdefinierten Operator
#include <vector>
#include <algorithm>
using namespace std;
typedef vector<pair<size_t,size_t> > int_pairs;
bool operator<(const size_t& l, const pair<size_t,size_t>& r)
{return r.first < l;} // useful for binary search
int main(){
int_pairs pairs_vec;
pairs_vec.push_back(pair <size_t,size_t>(1,2));
pairs_vec.push_back(pair <size_t,size_t>(2,2));
size_t i(2);
binary_search(pairs_vec.begin(),pairs_vec.end(),i);
}
Der Compiler sagt mir, dass die operator<
nicht definiert ist:
erreur: no match for ‘operator<’ (operand types are ‘const long unsigned int’ and ‘std::pair<long unsigned int, long unsigned int>’)
Mache ich es richtig? Ich habe versucht, die Definition des Operators auf viele verschiedene Arten zu ändern, aber nichts scheint zu funktionieren.
Vielleicht besser zu nutzen einige Map-Container (std :: map, zum Beispiel)? – user1837009
Es scheint, dass 'std :: binary_search' darauf besteht, dass das dritte Argument vom selben Typ wie der der Iterator-Elemente ist, oder dass es durch einen benutzerdefinierten Cast-Operator in es konvertiert werden kann. Da es keinen solchen Operator für 'size_t' und' pair 'gibt und Sie ihn nicht definieren können, weil C++ keine" freistehenden "Konvertierungsoperatoren zulässt, müssten Sie ein Paar aus' i' und sagen wir null und geben das als drittes Argument an 'std :: binary_search' weiter. –
dasblinkenlight
@dasblinkenlight Ich denke nicht, dass das der Fall ist. [Dies funktioniert] (http://coliru.stacked-crooked.com/view?id=86d6030f0279665f143baae27bb2d974-8b0daaaf3fed65fccdea86e19330ca84) mit einem benutzerdefinierten Typ, bei dem im '' '' '' '' '' '' '' '' '' '' '' '' 'nicht definiert ist. – jrok