oracular (3) binarysearch.3bobcat.gz

Provided by: libbobcat-dev_6.06.01-1_amd64 bug

NAME

       FBB::binary_search - Extensions to the STL binary_search function template

SYNOPSIS

       #include <bobcat/binarysearch>

DESCRIPTION

       The FBB::binary_search function templates extend the STL binary_search function templates by returning an
       iterator to the found element, instead of a bool value informing the caller whether or not  the  searched
       for element is present in a provided iterator range.

       The  bool  value returned by the STL binary_search function template is often not the kind of information
       the caller of the function is interested in. Rather, the caller will often want to use  binary_search  in
       the way find_if is used: returning an iterator to an element or returning the end-iterator if the element
       was not found.

       Whereas find_if does not require the elements in the iterator range to be sorted, and  therefore  uses  a
       linear  search,  binary_search  benefits  from  the  sorted  nature of the elements using a binary search
       algorithm requiring 2 log N iterations to locate the searched for element rather than  (on  average)  N/2
       iterations.  The  FBB::binary_search  algorithm uses this binary searching process while at the same time
       allowing it to be used like find_if.

       Since the FBB::binary_search function templates use the same  number  and  types  of  parameters  as  the
       stl::binary_search  function  templates  and  because  they  are  implemented  using the stl::lower_bound
       algorithms the FBB namespace must explicitly be specified when calling binary_search.

NAMESPACE

       FBB
       All constructors, members, operators and manipulators, mentioned in this man-page,  are  defined  in  the
       namespace FBB.

INHERITS FROM

       -

OVERLOADED FUNCTIONS

       In the following description several template type parameters are used. They are:

       o      Iterator represents an iterator type;

       o      Type represents a value of the type to which Iterator points.

       o      Comparator  represents  a  comparator  function  or  class  type object which was used to sort the
              elements to which the Iterator range refer;

       o      Iterator binary_search(Iterator begin, Iterator end, Type const &value):
              Using a binary search algorithm value is searched for in the range of elements referred to by  the
              provided  iterator  range.  If  the value is found an iterator pointing to this value is returned,
              otherwise end is returned. The elements in the range must have been sorted by the Type’s operator<
              function.

       o      Iterator binary_search(Iterator begin, Iterator end, Type const &value, Comparator comparator):
              Using  a binary search algorithm value is searched for in the range of elements referred to by the
              provided iterator range. If the value is found an iterator pointing to  this  value  is  returned,
              otherwise   end   is   returned.   The   elements  and  the  provided  value  are  compared  using
              comparator(*iterator, value) calls, where *iterator refers to an object in the  provided  iterator
              range.  The  elements  in  the  range must have been sorted by the Comparator function or function
              object.

              The comparator function is called with two arguments. The first argument refers to an  element  in
              the begin..end range, the second argument refers to value.

              Usually  the  types  of these arguments are identical, but they may differ. Assuming that Iterator
              refers to elements of a type Data, then comparison operators bool operator<(Data const &lhs,  Type
              const &rhs) and bool operator<(Type const &rhs, Data const &lhs) must both be available.

EXAMPLES

       #include <iostream>
       #include <string>
       #include "../binarysearch"

       using namespace std;

       string words[] =
       {
           "eight",                // alphabetically sorted number-names
           "five",
           "four",
           "nine",
           "one",
           "seven",
           "six",
           "ten",
           "three",
           "two"
       };

       bool compFun(string const &left, string const &right)
       {
           return left < right;
       }

       int main()
       {
           string *ret = FBB::binary_search(words, words + 10, "five");
           if (ret != words + 10)
               cout << "five is at offset " << (ret - words) << endl;

           ret = FBB::binary_search(words, words + 10, "grandpa");
           if (ret == words + 10)
               cout << "grandpa is not the name of a number\n";

           ret = FBB::binary_search(words, words + 10, "five",
               [&](string const &element, string const &value)
               {
                   return element < value;
               }
           );

           if (ret != words + 10)
               cout << "five is at offset " << (ret - words) << endl;

           ret = FBB::binary_search(words, words + 10, "grandpa", compFun);
                                                          // or use: Comparator()
           if (ret == words + 10)
               cout << "grandpa is not the name of a number\n";
       }

       and an example showing the use of different types:
       #include <iostream>
       #include <string>
       #include "../binarysearch"

       using namespace std;

       struct Words
       {
           string str;
           int value;
       };

       bool operator<(Words const &word, string const &str)
       {
           return word.str < str;
       }

       bool operator<(string const &str, Words const &word)
       {
           return str < word.str;
       }

       Words words[] =
       {
           { "eight", 0 },                // alphabetically sorted number-names
           { "five", 0 },
           { "four", 0 },
           { "nine", 0 },
           { "one", 0 },
           { "seven", 0 },
           { "six", 0 },
           { "ten", 0 },
           { "three", 0 },
           { "two", 0 }
       };

       int main()
       {
           auto ret = FBB::binary_search(words, words + 10, "five",
               [&](Words const &element, string const &value)
               {
                   return element < value;
               }
           );

           cout << (ret != words + 10 ? "found it" : "not present") << ’\n’;
       }

FILES

       bobcat/binarysearch - defines the template functions

SEE ALSO

       bobcat(7)

BUGS

       None reported.

BOBCAT PROJECT FILES

       o      https://fbb-git.gitlab.io/bobcat/: gitlab project page;

       o      bobcat_6.06.01-x.dsc: detached signature;

       o      bobcat_6.06.01-x.tar.gz: source archive;

       o      bobcat_6.06.01-x_i386.changes: change log;

       o      libbobcat1_6.06.01-x_*.deb: debian package containing the libraries;

       o      libbobcat1-dev_6.06.01-x_*.deb: debian package containing the libraries, headers and manual pages;

BOBCAT

       Bobcat is an acronym of `Brokken’s Own Base Classes And Templates’.

       This is free software, distributed under the terms of the GNU General Public License (GPL).

AUTHOR

       Frank B. Brokken (f.b.brokken@rug.nl).