Rogue Wave Software logo banner

Click on the banner to return to the Class Reference home page.

©Copyright 1996 Rogue Wave Software

RWTValMultiMap<K,T,C>

Synopsis

#include <rw/tvmmap.h> 
RWTValMultiMap<K,T,C> m;

Standard C++ Library Dependent!


RWTValMultiMap requires the Standard C++ Library.


Description

This class maintains a collection of keys, each with an associated item of type T. Order is determined by the key according to a comparison object of type C. C must induce a total ordering on elements of type K via a public member

bool operator()(const K& x, const K& y) const

which returns true if x and its partner should precede y and its partner within the collection. The structure less<T> from the C++-standard header file <functional> is an example.

RWTValMultiMap<K,T,C> may contain multiple keys that compare equal to each other. (RWTValMap<K,T,C> will not accept a key that compares equal to any key already in the collection.) Equality is based on the comparison object and not on the == operator. Given a comparison object comp, keys a and b are equal if !comp(a,b) && !comp(b,a).

Persistence

Isomorphic.

Examples

In this example, a map of RWCStrings and RWDates is exercised.

//
// tvmmbday.cpp
//
#include <rw/tvmmap.h>
#include <rw/cstring.h>
#include <rw/rwdate.h>
#include <iostream.h>
#include <function.h>

main(){
  typedef RWTValMultiMap<RWCString, RWDate, less<RWCString> >
     RWMMap;
  RWMMap birthdays;

  birthdays.insert("John", RWDate(12, "April",1975));
  birthdays.insert("Ivan", RWDate(2, "Nov", 1980));
  birthdays.insert("Mary", RWDate(22, "Oct", 1987));
  birthdays.insert("Ivan", RWDate(19, "June", 1971));
  birthdays.insert("Sally",RWDate(15, "March",1976));
  birthdays.insert("Ivan",  RWDate(6, "July", 1950));

  // How many "Ivan"s?
  RWMMap::size_type n = birthdays.occurrencesOf("Ivan");
  RWMMap::size_type idx = 0;
  cout << "There are " << n << " Ivans:" << endl;
  RWMMap::iterator iter = birthdays.std().lower_bound("Ivan");
  while (++idx <= n) 
    cout << idx << ".  " << (*iter++).second << endl; 
  return 0;
}

Program Output:
There are 3 Ivans:
1.  11/02/80
2.  06/19/71
3.  07/06/50

Related Classes

Class RWTValMap<K,T,C> offers the same interface to a collection that will not accept multiple keys that compare equal to each other. RWTValMultiSet<T,C> maintains a collection of keys without the associated values.

Class multimap<K,T,C,allocator> is the C++-standard collection that serves as the underlying implementation for this collection.

Public Typedefs

typedef multimap<K,T,C,allocator>             container_type;
typedef container_type::iterator              iterator;
typedef container_type::const_iterator        const_iterator;
typedef container_type::size_type             size_type;
typedef pair <const K,T>                       value_type;
typedef pair <const K,T>&                      reference;
typedef const pair <const K,T>&                const_reference;

Public Constructors

RWTValMultiMap<K,T,C>(const C& comp = C());
RWTValMultiMap<K,T,C>(const container_type& m);
RWTValMultiMap<K,T,C>(const RWTValMultiMap<K,T,C>& rwm);
RWTValMultiMap<K,T,C>
(const value_type* first, const value_type* last, 
 const C& comp = C());




Public Member Operators

RWTValMultiMap<K,T,C>&
operator=(const RWTValMultiMap<K,T,C>& m);
RWTValMultiMap<K,T,C>&
operator=(const container_type& m) const;
bool
operator<(const RWTValMultiMap<K,T,C>& m);
bool
operator<(const container_type& m) const;
bool
operator==(const RWTValMultiMap<K,T,C>& m) const;
bool
operator==(const container_type& m) const;

Public Member Functions

void
apply(void (*fn)(const K&, T&, void*),void* d);
void
apply(void (*fn)(const K&, const T&, void*),void* d) const;
void
applyToKeyAndValue(void (*fn)(const K&, T&, void*),void* d);
void
applyToKeyAndValue
(void (*fn)(const K&, const T&, void*),void* d) const;
iterator
begin();
const_iterator
begin() const;
void
clear();
bool
contains(const K& key) const;
bool
contains
(bool (*fn)(const_reference,void*),void* d) const;
iterator
end();
const_iterator
end() const;
size_type
entries() const;
bool
find(const K& key, Key& r) const;
bool
find(bool (*fn)(const_reference,void*),void* d, 
     pair<K,T>& r) const;
bool
findValue(const K& key, T& r) const;
bool
findKeyValue(const K& key, K& kr, T& tr) const;
bool
insert(const K& key, const T& a);
bool
insertKeyAndValue(const K& key, const T& a);
bool
isEmpty() const;
size_type
occurrencesOf(const K& key) const;
size_type
occurrencesOf(bool (*fn)(const_reference,void*), 
              void* d) const;
bool
remove(const K& key);
bool
remove(bool (*fn)(const_reference,void*), void* d);
size_type
removeAll(const K& key);
size_type
removeAll(bool (*fn)(const_reference,void*), void* d);
multimap<K,T,C,allocator>&
std();
const multimap<K,T,C,allocator>&
std() const;

Related Global Operators

RWvostream&
operator<<(RWvostream& strm, 
       const RWTValMultiMap<K,T,C>& coll);
RWFile&
operator<<(RWFile& strm, const RWTValMultiMap<K,T,C>& coll);
RWvistream&
operator>>(RWvistream& strm, RWTValMultiMap<K,T,C>& coll);
RWFile&
operator>>(RWFile& strm, RWTValMultiMap<K,T,C>& coll);
RWvistream&
operator>>(RWvistream& strm, RWTValMultiMap<K,T,C>*& p);
RWFile&
operator>>(RWFile& strm, RWTValMultiMap<K,T,C>*& p);