![]() ![]() ![]()
|
BREW C++ ライブラリ & GUI フレームワーク & XML ミドルウェア : SophiaFramework UNIVERSE 5.0 |


ハッシュマップ ( SFXHashmap クラスのインスタンス ) の要素のキーは 4 バイト以下のデータ、SFXAnsiString クラス または SFXWideString クラスのインスタンスでなければいけません。 また、ハッシュマップの要素の値は 4 バイト以下のデータでなければいけません。 5 バイト以上の UInt64 型データ や Double 型データ、クラスのインスタンスをハッシュマップの要素の値として処理するにはポインタを使います。
// 5 バイト以上のデータやクラスのインスタンスは // ハッシュマップ ( SFXHashmap クラスのインスタンス ) の要素の値にできない // SFXHashmap<SFXAnsiString, SInt64> map64; NG // SFXHashmap<SFXAnsiString, SFXAnsiString> mapstr; NG // しかし、5 バイト以上のデータやクラスのインスタンスへのポインタはハッシュマップの要素の値にできる SFXHashmap<SFXAnsiString, SInt64Ptr> map64; // OK SFXHashmap<SFXAnsiString, SFXAnsiStringPtr> mapstr; // OK
![]() |
SophiaFramework UNIVERSE 5.0.1 以降の仕様変更 |
|---|---|
|
SFXHashmap では、要素数が 要素数が SFXHashmap::SetThreshold 関数で設定された閾値を超えると、 ハッシュマップテーブルのサイズが拡張されます。 従来は SFXHashmap::SetRatio 関数で指定した割合で拡張されていましたが、 SophiaFramework UNIVERSE 5.0.1 以降は要素数が閾値の範囲内に収まるように自動的にハッシュマップテーブルのサイズが素数の値で拡張されるようになりました。 なお、SFXHashmap ではハッシュマップテーブルのひとつのエントリーに複数の要素を格納できるので、 閾値の値として 100 より大きな数字を設定することができます(閾値のデフォルト値は 80 です)。 記憶容量が少ない携帯電話では閾値を 100 より大きな数字に設定することでメモリの節約が可能です。 | |
| コンストラクタ/デストラクタ |
|---|
|
SFXHashmap( Void ) SFXHashmap クラスのコンストラクタです。
|
|
SFXHashmap(
UInt16 threshold
, UInt16 ratio
) SFXHashmap クラスのコンストラクタです。
|
| パブリック関数 | |
|---|---|
| Void |
Clear( Void ) ハッシュマップを空にします。
|
| Bool |
ContainsKey(
KeyType key
) 指定したキーが含まれるか判定します。
|
| Bool |
ContainsValue(
ValueType value
) 指定した値が含まれるか判定します。
|
| static SFXHashmap< K, V > const & |
EmptyInstance( Void ) 空のハッシュマップを取得します。
|
| Bool |
Equals(
SFXHashmap< K, V > const & collection
) ハッシュマップが等しいか比較します。
|
| ValueType |
Get(
KeyType key
) 指定したキーに対する値を取得します。
|
| KeyEnumerator |
GetKeyEnumerator( Void ) ハッシュマップのキーに関する列挙子を取得します。
|
| KeyIterator |
GetKeyIterator( Void ) ハッシュマップのキーに関する反復子を取得します。
|
| UInt16 |
GetRatio( Void ) 【SF UNIVERSE 5.0.1 から無効】ハッシュテーブルの大きさを拡張する割合を取得します。
|
| SInt32 |
GetSize( Void ) サイズ(ハッシュマップ キーの総数)を取得します。
|
| UInt16 |
GetThreshold( Void ) ハッシュテーブルの大きさを拡張する閾値を取得します。
|
| ValueEnumerator |
GetValueEnumerator( Void ) ハッシュマップの値に関する列挙子を取得します。
|
| ValueIterator |
GetValueIterator( Void ) ハッシュマップの値に関する反復子を取得します。
|
| Bool |
IsEmpty( Void ) ハッシュマップが空であるか判定します。
|
| SFCError |
Merge(
SFXHashmap< K, V > const & collection
) ハッシュマップを統合します。
|
| Void |
Remove(
KeyType key
) 指定したキーを削除します。
|
| SFCError |
Set(
SFXHashmap< K, V > const & collection
) Set( KeyType key , ValueType value ) キーに対応する値を設定します。またはハッシュマップを設定します。
|
| Void |
SetRatio(
UInt16 param
) 【SF UNIVERSE 5.0.1 から無効】ハッシュテーブルの大きさを拡張する割合を設定します。
|
| Void |
SetThreshold(
UInt16 param
) ハッシュテーブルの大きさを拡張する閾値を設定します。
|
| SFCError |
Swap(
KeyType destination
, KeyType source
) 指定したキーに対する値を交換します。
|
| ValueType |
operator[](
KeyType key
) 指定したキーに対する値を取得します。
|
| 型 |
|---|
|
DefaultEnum ハッシュテーブルの大きさを拡張する閾値と割合の既定値を表します。
|
|
KeyEnumerator ハッシュマップのキーに関する列挙子を保持するクラスです。
|
|
KeyIterator ハッシュマップのキーに関する反復子を保持するクラスです。
|
|
ValueEnumerator ハッシュマップの値に関する列挙子を保持するクラスです。
|
|
ValueIterator ハッシュマップの値に関する反復子を保持するクラスです。
|
[ public, explicit ] SFXHashmap(Void);
[ public, explicit ]
SFXHashmap(
UInt16 threshold // ハッシュテーブルの拡張を行う閾値
UInt16 ratio // 拡張される割合
);
[ public ] Void Clear(Void);
文字列キーを利用する場合は、キー管理用のリソースは自動的に解放されます。
格納されているキーや値がクラスのインスタンスへのポインタの場合、そのインスタンスは自動的に解放されません。
SFXHashmap<SFXAnsiString, SInt32> strmap;
...
strmap.Clear(); // すべてのデータと管理用メモリを解放する
[ public, const ] Bool ContainsKey( KeyType key // 存在するか調べるキー );
SFXHashmap<SFXAnsiString, SInt32> strmap; // キーと値からなるハッシュマップ要素を設定する if (strmap.Set("mike", 2) == SFERR_NO_ERROR) { // キーと値からなるハッシュマップ要素を設定する if (strmap.Set("john", 1) == SFERR_NO_ERROR) { // 指定したキーが含まれるか判定する TRACE("ContainsKey(\"mike\") = %s", (strmap.ContainsKey("mike")) ? ("true") : ("false")); // ContainsKey("mike") = true TRACE("ContainsKey(\"tom\") = %s", (strmap.ContainsKey("tom")) ? ("true") : ("false")); // ContainsKey("tom") = false } }
[ public, const ] Bool ContainsValue( ValueType value // 存在するか調べる値 );
SFXHashmap<SFXAnsiString, SInt32> strmap; // キーと値からなるハッシュマップ要素を設定する if (strmap.Set("mike", 2) == SFERR_NO_ERROR) { // キーと値からなるハッシュマップ要素を設定する if (strmap.Set("john", 1) == SFERR_NO_ERROR) { // 指定した値が含まれるか判定する TRACE("ContainsValue(2) = %s", (strmap.ContainsValue(2)) ? ("true") : ("false")); // ContainsValue(2) = true TRACE("ContainsValue(5) = %s", (strmap.ContainsValue(5)) ? ("true") : ("false")); // ContainsValue(5) = false } }
[ public, static ] SFXHashmap< K, V > const & EmptyInstance(Void);
空のハッシュマップを表すインスタンスを取得します。
[ public, const ] Bool Equals( SFXHashmap< K, V > const & collection // 比較するハッシュマップ );
2 つのハッシュマップに同じキーとその値の要素が同じ順で格納されているか調べます。
キーまたはその値がクラスのインスタンスへのポインタの場合、アドレスを比較します。
[ public, const ]
ValueType Get(
KeyType key // 取得する値のキー
);指定したキーに対するマッピングがあれば、値を返します。
なければ null を返します。
SFXHashmap<SFXAnsiString, SInt32> strmap; // キーと値からなるハッシュマップ要素を設定する if (strmap.Set("mike", 2) == SFERR_NO_ERROR) { // キーと値からなるハッシュマップ要素を設定する if (strmap.Set("john", 1) == SFERR_NO_ERROR) { // 指定したキーに対する値を取得する TRACE("%d", strmap.Get("mike")); // 2 } }
[ public, const ] KeyEnumerator GetKeyEnumerator(Void);
SFXHashmap::GetKeyIterator | SFXHashmap::GetValueIterator | SFXHashmap::GetValueEnumerator | SFXHashmap::ValueEnumerator | SFXHashmap::ValueIterator | SFXHashmap::KeyEnumerator | SFXHashmap::KeyIterator
[ public ] KeyIterator GetKeyIterator(Void);
SFXHashmap::GetKeyEnumerator | SFXHashmap::GetValueEnumerator | SFXHashmap::GetValueIterator | SFXHashmap::ValueEnumerator | SFXHashmap::ValueIterator | SFXHashmap::KeyEnumerator | SFXHashmap::KeyIterator
[ public, const ] UInt16 GetRatio(Void);
[ public, const ] SInt32 GetSize(Void);
[ public, const ] UInt16 GetThreshold(Void);
[ public, const ] ValueEnumerator GetValueEnumerator(Void);
SFXHashmap::GetValueIterator | SFXHashmap::GetKeyIterator | SFXHashmap::GetKeyEnumerator | SFXHashmap::ValueEnumerator | SFXHashmap::ValueIterator | SFXHashmap::KeyEnumerator | SFXHashmap::KeyIterator
[ public ] ValueIterator GetValueIterator(Void);
SFXHashmap::GetValueEnumerator | SFXHashmap::GetKeyIterator | SFXHashmap::GetKeyEnumerator | SFXHashmap::ValueEnumerator | SFXHashmap::ValueIterator | SFXHashmap::KeyEnumerator | SFXHashmap::KeyIterator
[ public, const ] Bool IsEmpty(Void);
[ public ] SFCError Merge( SFXHashmap< K, V > const & collection // 統合するハッシュマップ );
処理中に何らかのエラーが発生した場合は、元の状態に戻します。
[ public ] Void Remove( KeyType key // 削除するキー );
[ public ] SFCError Set( SFXHashmap< K, V > const & collection // 設定するハッシュマップ );
[ public ] SFCError Set( KeyType key // 設定するキー ValueType value // 設定する値 );
処理中に何らかのエラーが発生した場合は、元の状態に戻します。
SFXHashmap<SFXAnsiString, SInt32> strmap; // キーに対応する値を設定する if (strmap.Set("mike", 2) == SFERR_NO_ERROR) { // キーに対応する値を設定する if (strmap.Set("john", 1) == SFERR_NO_ERROR) { // 指定したキーが存在するか判定する TRACE("ContainsKey(\"mike\") = %s", (strmap.ContainsKey("mike")) ? ("true") : ("false")); // ContainsKey("mike") = true TRACE("ContainsKey(\"tom\") = %s", (strmap.ContainsKey("tom")) ? ("true") : ("false")); // ContainsKey("tom") = false } }
ハッシュテーブルは、キーの数が増えた時に効率化のためにサイズが拡張されます。
テーブルの大きさを増加させる割合を百分率で指定します。
![]() |
SophiaFramework UNIVERSE 5.0.1 以降の仕様変更 |
|---|---|
|
SophiaFramework UNIVERSE 5.0.1 以降、この値を指定しても無効になりました。 ハッシュテーブルのサイズは、 要素数が SFXHashmap::SetThreshold 関数で設定された閾値を超えると、 閾値の範囲に収まるように素数の値で自動的に増加するように仕様が変更になっています。 | |
ハッシュテーブルは、キーの数が増えた時に効率化のためにサイズが拡張されます。
以下の条件を満たすときに自動で行われます。
要素数 > ハッシュテーブルのサイズ * 閾値 / 100
デフォルト値 : 80。
![]() |
閾値の値 |
|---|---|
|
SFXHashmap では、ハッシュテーブルのキーが衝突した場合、ひとつのテーブルエントリーに複数の項目を格納できる設計になっているので、 SFXHashmap はハッシュテーブルのサイズ以上の要素を持つことができます。 そのため、SFXHashmap::SetThreshold 関数で設定する閾値に 100 よりも大きな数値を設定可能です。 | |
[ public ] SFCError Swap( KeyType destination // 交換先のキー KeyType source // 交換元のキー );
SFXHashmap<SFXAnsiString, SInt32> strmap; // キーと値からなるハッシュマップ要素を設定する if (strmap.Set("mike", 2) == SFERR_NO_ERROR) { // キーと値からなるハッシュマップ要素を設定する if (strmap.Set("john", 1) == SFERR_NO_ERROR) { // 要素を交換する if (strmap.Swap("mike", "john") == SFERR_NO_ERROR) { // 指定したキーに対する値を取得する TRACE("%d", strmap.Get("mike")); // 1 } } }
[ public, const ]
ValueType operator[](
KeyType key // 取得するキーの位置
);指定したキーに対するマッピングが存在すればその値を返します。
存在しなければ null を返します。
enum DefaultEnum {
DEFAULT_THRESHOLD = 80, // ハッシュテーブルの大きさを拡張する閾値
DEFAULT_RATIO = 50 // ハッシュテーブルの大きさを拡張する割合
};
SFXHashmap::SetThreshold | SFXHashmap::GetThreshold | SFXHashmap::SetRatio | SFXHashmap::GetRatio
[ public ]
SFMTYPEDEFCLASS(KeyEnumerator)
class KeyEnumerator {
public:
explicit KeyEnumerator (Void);
KeyEnumerator (KeyIteratorConstRef iterator);
KeyEnumeratorRef operator= (KeyIteratorConstRef iterator);
KeyType GetNext (Void);
KeyType GetPrevious (Void);
ValueType GetValue (Void) const;
Bool HasNext (Void) const;
Bool HasPrevious (Void) const;
Bool IsValid (Void) const;
};
KeyEnumerator クラスは、ハッシュマップのキーに関する列挙子を保持するクラスです。
| GetNext | 次の要素を取得します。要素がない場合 null を返します。 |
| GetPrevious | 前の要素を取得します。要素がない場合 null を返します。 |
| GetValue | 現在の要素に対する値を取得します。無効な場合は null を返します。 |
| HasNext | 次の要素があるか調べます。 |
| HasPrevious | 前の要素があるか調べます。 |
| IsValid | 列挙子が有効であるか判定します。 |
SFXHashmap::KeyIterator | SFXHashmap::ValueEnumerator | SFXHashmap::ValueIterator | SFXHashmap::GetKeyEnumerator | SFXHashmap::GetKeyIterator | SFXHashmap::GetValueEnumerator | SFXHashmap::GetValueIterator
[ public ]
SFMTYPEDEFCLASS(KeyIterator)
class KeyIterator {
public:
explicit KeyIterator (Void);
KeyType GetNext (Void);
KeyType GetPrevious (Void);
ValueType GetValue (Void) const;
Bool HasNext (Void) const;
Bool HasPrevious (Void) const;
Bool IsValid (Void) const;
Void Remove (Void);
};
KeyIterator クラスは、ハッシュマップのキーに関する反復子を保持するクラスです。
| GetNext | 次の要素を取得します。要素がない場合 null を返します。 |
| GetPrevious | 前の要素を取得します。要素がない場合 null を返します。 |
| GetValue | 現在の要素に対する値を取得します。無効な場合は null を返します。 |
| HasNext | 次の要素があるか調べます。 |
| HasPrevious | 前の要素があるか調べます。 |
| IsValid | 反復子が有効であるか判定します。 |
| Remove | 反復子が指す要素を削除します。 |
SFXHashmap::KeyEnumerator | SFXHashmap::ValueEnumerator | SFXHashmap::ValueIterator | SFXHashmap::GetKeyEnumerator | SFXHashmap::GetKeyIterator | SFXHashmap::GetValueEnumerator | SFXHashmap::GetValueIterator
[ public ]
SFMTYPEDEFCLASS(ValueEnumerator)
class ValueEnumerator {
public:
explicit ValueEnumerator (Void);
ValueEnumerator (ValueIteratorConstRef iterator);
ValueEnumeratorRef operator= (ValueIteratorConstRef iterator);
ValueType GetNext (Void);
ValueType GetPrevious (Void);
KeyType GetKey (Void) const;
Bool HasNext (Void) const;
Bool HasPrevious (Void) const;
Bool IsValid (Void) const;
};
ValueEnumerator クラスは、ハッシュマップの値に関する列挙子を保持するクラスです。
| GetNext | 次の要素を取得します。要素がない場合 null を返します。 |
| GetPrevious | 前の要素を取得します。要素がない場合 null を返します。 |
| GetKey | 現在の要素に対するキーを取得します。無効な場合は null を返します。 |
| HasNext | 次の要素があるか調べます。 |
| HasPrevious | 前の要素があるか調べます。 |
| IsValid | 列挙子が有効であるか判定します。 |
SFXHashmap::ValueIterator | SFXHashmap::KeyEnumerator | SFXHashmap::KeyIterator | SFXHashmap::GetKeyEnumerator | SFXHashmap::GetKeyIterator | SFXHashmap::GetValueEnumerator | SFXHashmap::GetValueIterator
[ public ]
SFMTYPEDEFCLASS(ValueIterator)
class ValueIterator {
public:
explicit ValueIterator (Void);
SFCError Set (ValueType value);
ValueType GetNext (Void);
ValueType GetPrevious (Void);
KeyType GetKey (Void) const;
Bool HasNext (Void) const;
Bool HasPrevious (Void) const;
Bool IsValid (Void) const;
Void Remove (Void);
};
ValueIterator クラスは、ハッシュマップの値に関する反復子を保持するクラスです。
| Set | 反復子が指す要素に対する値の内容を指定した値で設定します。 |
| GetNext | 次の要素を取得します。要素がない場合 null を返します。 |
| GetPrevious | 前の要素を取得します。要素がない場合 null を返します。 |
| GetKey | 現在の要素に対するキーを取得します。無効な場合は null を返します。 |
| HasNext | 次の要素があるか調べます。 |
| HasPrevious | 前の要素があるか調べます。 |
| IsValid | 反復子が有効であるか判定します。 |
| Remove | 反復子が指す要素を削除します。 |
|
Copyright (C) 2002 - 2008 Sophia Cradle Incorporated All Rights Reserved. |
![]() ![]() ![]()
|