Provided by: libbobcat-dev_6.04.00-1ubuntu3_amd64 bug

NAME

       FBB::PtrIter - Iterator returning pointer when dereferenced

SYNOPSIS

       #include <bobcat/ptriter>

DESCRIPTION

       The  PtrIter  class  template  implements  an  input  iterator whose operator* returns the address of the
       element the iterator refers to.  Consider a std::unordered_map<std::string, DataType>. Its  begin  member
       returns an iterator whose operator* returns a std::pair<std::string, DataType> (const) &. This is usually
       what  you  want,  but  now  assume  we want to display the map’s content, sorted by its keys. Sorting can
       simply be performed by defining a support vector containing pointers to the elements in the map, and then
       sorting the strings the pointers point at.

       PtrIter is a tool that can be used to construct such a support vector, as shown in the EXAMPLE section.

       PtrIter is a class template requiring one template type parameter: Iterator, the iterator’s  type  (e.g.,
       vector<string>::iterator)

       PtrIter’s  users  don’t  have  to  specify  PtrIter’s  template type. The function template ptrIter, when
       provided with an iterator returns the matching PtrIter object.

NAMESPACE

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

INHERITS FROM

       std::iterator<std::input_iterator_tag, ...>

FREE FUNCTION

       o      PtrIter<Iterator> ptrIter(Iterator const &iter):
              this  function  template  returns  a  PtrIter  object  for  the function’s Iterator argument. This
              function template simplyfies the construction of a PtrIter as no template parameters  need  to  be
              specified (see also the EXAMPLE section)

CONSTRUCTORS

       o      PtrIter(Iterator const &iter):
              The  iter  parameter  must  be  initialized  with  an existing input iterator, offering operator*,
              operator++, operator== and operator!=.   As  PtrIter  is  a  class  template,  its  template  type
              parameters must be specified when defining a PtrIter object. E.g.,

                  PtrIter<set<string>::iterator> PtrIter(mySet.begin());

       Copy and move constructors (and assignment operators) are available.

OVERLOADED OPERATORS

       o      PtrType operator*() const:
              the address of the entity the iterator refers to is returned;

       o      PtrIter &operator++():
              the iterator is (pre)incremented to the next position;

       o      bool operator==(PtrIter const &other) const:
              true is returned if the two iterators are equal;

       o      bool operator!=(PtrIter const &other) const:
              true is returned if the two iterators are unequal;

USING DECLARATION

       The PtrIter class template defines PtrType:

       o      using PtrType = decltype(&*Iterator()):

MEMBER FUNCTIONS

       All  members of std::iterator<std:::input_iterator_tag, ...> are available, as FBB::PtrIter inherits from
       this class.

EXAMPLE

       #include <algorithm>
       #include <unordered_map>
       #include <vector>
       #include <cstring>
       #include <iostream>

       #include <bobcat/ptriter>

       using namespace std;
       using namespace FBB;

       int main()
       {
           cout << "Enter lines, the first word will be the map’s key; "
                                                   "^D when done.\n";

           string key;
           string line;
           unordered_map<string, string> map;
           while (cin >> key && getline(cin, line))    // fill the map
               map[key] = line;
           cout << ’\n’;

                                               // initialize a support
           vector<decltype(&*map.begin())>     // vector, using ptrIter
               support(ptrIter(map.begin()), ptrIter(map.end()));

                                               // sort ’support’
           typedef unordered_map<string, string>::value_type VT;
           sort(support.begin(), support.end(),
               [&](VT const *p1, VT const *p2)
               {
                   return strcasecmp(p1->first.c_str(), p2->first.c_str()) < 0;
               }
           );

           for(auto &element: support)         // display sorted by key
               cout << element->first << ’ ’ << element->second << ’\n’;
       }

FILES

       bobcat/ptriter - defines the class interface

SEE ALSO

       bobcat(7)

BUGS

       None Reported.

BOBCAT PROJECT FILES

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

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

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

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

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

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

BOBCAT

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

COPYRIGHT

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

AUTHOR

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

libbobcat-dev_6.04.00                               2005-2023                              FBB::PtrIter(3bobcat)