バナーをクリックすれば目次に戻ります
Copyright 1999 Rogue Wave Software
Copyright 1999 Sun Microsystems, Inc.
RWTPtrMultiMap<K,T,C>
#include <rw/tpmmap.h> RWTPtrMultiMap<K,T,C> m;
注 - RWTPtrMultiMap には標準 C++ ライブラリが必要です。
bool operator()(const K& x, const K& y)これは、コレクション内において、x とそのパートナーが y とそのパートナーより前になる場合、TRUE を返します。C++ 標準ヘッダーファイル <functional> からの構造体 less<T> がその例です。キーは比較前に間接参照されることに注意してください。
RWTPtrMultiMap<K,T,C> には、互いに等しい複数のキーを含めることができます (RWTPtrMap<K,T,C> は、コレクション内の既存のキーと等しいキーは受け付けません)。等しいかどうかは、== 演算子ではなく、比較オブジェクトにもとづいて判定されます。比較オブジェクト comp を使用するとき、キー a と b は次の場合に等しくなります。
!comp(a,b) && !comp(b,a)
//
// tpmmap.cpp
//
#include <rw/tpmmap.h>
#include <rw/cstring.h>
#include <rw/rwdate.h>
#include <iostream.h>
main(){
typedef RWTPtrMultiMap<RWCString, RWDate, less<RWCString> >
RWMMap;
RWMMap birthdays;
birthdays.insert(new RWCString("John"),
new RWDate(12, "April", 1975));
birthdays.insert(new RWCString("Ivan"),
new RWDate(2, "Nov", 1980));
birthdays.insert(new RWCString("Mary"),
new RWDate(22, "Oct", 1987));
birthdays.insert(new RWCString("Ivan"),
new RWDate(19, "June", 1971));
birthdays.insert(new RWCString("Sally"),
new RWDate(15, "March", 1976));
birthdays.insert(new RWCString("Ivan"),
new RWDate(6, "July", 1950));
// 「Ivan」がいくつあるか?
RWCString ivanstr("Ivan");
RWMMap::size_type n = birthdays.occurrencesOf(&ivanstr);
RWMMap::size_type idx = 0;
cout << "There are " << n << " Ivans:" << endl;
RWMMap::const_iterator iter =
birthdays.std().lower_bound(&ivanstr);
while (++idx <= n)
cout << idx << ". " << *(*iter++).second << endl;
return 0;
}
|
There are 3 Ivans: 1. 11/02/80 2. 06/19/71 3. 07/06/50 |
クラス multimap<K*,T*,deref_compare<C,K,allocator>> は、このコレクションの基礎となる実装として使用される C++ 標準コレクションです。
typedef rw_deref_compare<C,K> container_comp;
typedef multimap<K*,T*,container_comp,allocator>
container_type;
typedef container_type::size_type size_type;
typedef container_type::difference_type difference_type;
typedef container_type::iterator iterator;
typedef container_type::const_iterator const_iterator;
typedef pair<K* const, T*> value_type;
typedef pair<K* const, T*> reference;
typedef const pair<K* const, T*>& const_reference;
typedef K* value_type_key;
typedef T* value_type_data;
typedef K*& reference_key;
typedef T*& reference_data;
typedef const K*const& const_reference_key;
typedef const T*const& const_reference_data;
RWTPtrMultiMap<K,T,C> (const container_comp& comp =container_comp());
RWTPtrMultiMap<K,T,C>(const container_type& m);
RWTPtrMultiMap<K,T,C>(const RWTPtrMultiMap<K,T,C>& rwm);
RWTPtrMultiMap<K,T,C>(value_type* first,value_type* last, const container_comp& comp = container_comp());
RWTPtrMultiMap<K,T,C>& operator=(const container_type& m); RWTPtrMultiMap<K,T,C>& operator=(const RWTPtrMultiMap<K,T,C>& m);
bool operator<(const RWTPtrMultiMap<K,T,C>& m);
bool operator==(const RWTPtrMultiMap<K,T,C>& m);
void apply(void (*fn)(const K*, T*&,void*),void* d); void apply(void (*fn)(const K*,const T*,void*),void* d) const;
void yourfun(const K* key, T*& a, void* d); void yourfun(const K* key, const T* a, void* d);
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();
void clearAndDestroy();
bool contains(const K* key) const;
bool contains(bool (*fn)(value_type,void*), void* d) const;
bool yourTester(value_type a, void* d);
iterator end(); const_iterator end() const;
size_type entries() const;
const K* find(const K* key) const;
value_type find(bool (*fn)(value_type,void*), void* d) const;
bool yourTester(value_type a, void* d);
T* findValue(const K* key); const T* findValue(const K* key) const;
const K* findKeyAndValue(const K* key, T*& tr); const K* findKeyAndValue(const K* key, const T*& tr) const;
bool insert(K* key, T* a);
bool insertKeyAndValue(K* key, T* a);
bool isEmpty() const;
size_type occurrencesOf(const K* key) const;
size_type occurrencesOf (bool (*fn)(value_type,void*), void* d) const;
bool yourTester(value_type a, void* d);
K* remove(const K* key);
K* remove(bool (*fn)(value_type,void*), void* d);
bool yourTester(value_type a, void* d);
size_type removeAll(const K* key);
size_type removeAll(bool (*fn)(value_type,void*), void* d);
bool yourTester(value_type a, void* d);
container_type& std(); const container_type& std() const;
RWvostream&
operator<<(RWvostream& strm,
const RWTPtrMultiMap<K,T,C>& coll);
RWFile&
operator<<(RWFile& strm,
const RWTPtrMultiMap<K,T,C>& coll);
RWvistream& operator>>(RWvistream& strm, RWTPtrMultiMap<K,T,C>& coll); RWFile& operator>>(RWFile& strm, RWTPtrMultiMap<K,T,C>& coll);
RWvistream& operator>>(RWvistream& strm, RWTPtrMultiMap<K,T,C>*& p); RWFile& operator>>(RWFile& strm, RWTPtrMultiMap<K,T,C>*& p);
