sorry if this is a noobish question but even after reading a bunch of documentation and forum posts I just can't seem to get this to compile:
Basically, I've got this struct:
struct Entry{
unsigned long long time;
// other things...
};
And I've successfully created a vector<Entry*> timestampSearch.
timestampSearch has been sorted, and I'm pretty sure successfully, based on the member variable unsigned long long time in each of the objects of type Entry that each of the elements of timestampSearch point to.
FWIW, it was sorted via <algorithm>'s std::sort function, using this predicate:
// time compare predicate/functor to sort by timestamp
struct cmp_time_cat_entryID{
inline bool operator() (Entry* entry1, Entry* entry2) const{
if (entry1->time == entry2->time){
if (entry1->category_lower == entry2->category_lower){
return (entry1->entryID < entry2->entryID);
}
else{
return (entry1->category_lower < entry2->category_lower);
}
}
return (entry1->time < entry2->time);
}
};
...and called like this:
sort(timestampSearch.begin(), timestampSearch.end(), cmp_time_cat_entryID());
So, when it came time to binary_search timestampSearch, I had figured the syntax for calling STL binary_search would be very similar to STL sort, and tried to call it like so:
bool time1present = false;
unsigned long long time1 = 0425215422
time1present = binary_search(timestampSearch.begin(),
timestampSearch.end(),
time1,
cmp_time());
...with a very similar predicate that might (?) save on a few cycles:
struct cmp_time{
inline bool operator() (Entry* entry1, Entry* entry2) const{
return (entry1->time == entry2->time);
}
};
However, I'm getting this compile error:
Error 1 error C2664:
'bool cmp_time::operator ()(Entry *,Entry *) const' :
cannot convert argument 1 from 'const unsigned __int64' to 'Entry *'
c:\program files (x86)\microsoft visual studio 12.0\vc\include\algorithm 2666 1 test_unordered_map
Can anyone help me fix this and get binary_search working?
Your binary search comparison function compares between
Entryobject whereas you are passing anunsigned long longtype (which cannot be converted toEntry*).Create a new instance of
Entryobject (which is to be searched) and pass it to thebinary_searchfunction or create the appropriate comparison function.In C++11 and above, you can also use a lambda expression as the comparison function.