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
contents, 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());
The copy and move constructors 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; The copy and move
assignment operators are available.
DEFINED TYPE¶
PtrIter defines the following type:
- o
- typedef decltype(&*Iterator()) PtrType:
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.
DISTRIBUTION FILES¶
- o
- bobcat_3.01.00-x.dsc: detached signature;
- o
- bobcat_3.01.00-x.tar.gz: source archive;
- o
- bobcat_3.01.00-x_i386.changes: change log;
- o
- libbobcat1_3.01.00-x_*.deb: debian package holding
the libraries;
- o
- libbobcat1-dev_3.01.00-x_*.deb: debian package
holding the libraries, headers and manual pages;
- o
- http://sourceforge.net/projects/bobcat: public
archive location;
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).