SophiaFramework UNIVERSE 5.3 |
廃止予定 | |
---|---|
このクラスは、SophiaFramework UNIVERSE 6.0 で廃止される予定です。 このクラスの替わりに SFXLinkedHashMap クラスを利用することを推奨します。 |
ハッシュマップ ( SFXOldHashmap インスタンス ) の要素のキーは 4 バイト以下のデータ、 SFXAnsiString クラス または SFXWideString インスタンスでなければいけません。 また、ハッシュマップの要素の値は 4 バイト以下のデータでなければいけません。 5 バイト以上の UInt64 型データ や Float64 型データ、 クラスのインスタンスをハッシュマップの要素の値として処理するにはポインタを使います。
// 5 バイト以上のデータやクラスインスタンスは // ハッシュマップ ( SFXOldHashmap インスタンス ) の要素の値にできない // SFXOldHashmap<SFXAnsiString, SInt64> map64; NG // SFXOldHashmap<SFXAnsiString, SFXAnsiString> mapstr; NG // しかし、5 バイト以上のデータやクラスのインスタンスへのポインタはハッシュマップの要素の値にできる SFXOldHashmap<SFXAnsiString, SInt64Ptr> map64; // OK SFXOldHashmap<SFXAnsiString, SFXAnsiStringPtr> mapstr; // OK
SophiaFramework UNIVERSE 5.0.1 以降の仕様変更 | |
---|---|
SFXOldHashmap では、要素数が 要素数が SFXOldHashmap::SetThreshold 関数で設定された閾値を超えると、 ハッシュマップテーブルのサイズが拡張されます。 従来は SFXOldHashmap::SetRatio 関数で指定した割合で拡張されていましたが、 SophiaFramework UNIVERSE 5.0.1 以降は要素数が閾値の範囲内に収まるように自動的にハッシュマップテーブルのサイズが素数の値で拡張されるようになりました。 なお、SFXOldHashmap ではハッシュマップテーブルのひとつのエントリーに複数の要素を格納できるので、 閾値の値として 100 より大きな数字を設定することができます(閾値のデフォルト値は 80 です)。 記憶容量が少ない携帯電話では閾値を 100 より大きな数字に設定することでメモリの節約が可能です。 |
コンストラクタ/デストラクタ |
---|
SFXOldHashmap( Void ) SFXOldHashmap クラスのコンストラクタです。
|
SFXOldHashmap(
UInt16 threshold
, UInt16 ratio
) SFXOldHashmap クラスのコンストラクタです。
|
パブリック関数 | |
---|---|
Void |
Clear( Void ) ハッシュマップを空にします。
|
Bool |
ContainsKey(
KeyType key
) 指定されたキーを持つペア要素が含まれるか判定します。
|
Bool |
ContainsValue(
ValueType value
) 指定された値を持つペア要素が含まれるか判定します。
|
static SFXOldHashmap< K, V > const & |
EmptyInstance( Void ) 空のハッシュマップを取得します。
|
Bool |
Equals(
SFXOldHashmap< 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(
SFXOldHashmap< K, V > const & collection
) ハッシュマップを統合します。
|
Void |
Remove(
KeyType key
) 指定されたキーを持つペア要素を削除します。
|
SFCError |
Set(
SFXOldHashmap< K, V > const & collection
) キーに対応する値を設定します。またはハッシュマップを設定します。
|
SFCError |
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 ] SFXOldHashmap(Void);
[ public, explicit ] SFXOldHashmap( UInt16 threshold // ハッシュテーブルの拡張を行う閾値 UInt16 ratio // 拡張される割合 );
[ public ] Void Clear(Void);
この関数は、このハッシュマップを空にします。 このハッシュマップに割り当てられていたメモリ領域は解放されます。
この関数を実行した後、ハッシュマップのサイズは 0 になります。
キーが文字列(SFXAnsiString / SFXWideString 型)である場合、 キーである文字列も自動的に解放されます。
注意 | |
---|---|
キーや値がクラスインスタンスや 4 バイトよりも大きなデータへのポインタの場合、 ポインタが指すメモリ領域は解放されません。 ハッシュマップをクリアする前に、 delete 文を使用して明示的にその領域を解放する必要があります。 さもなければ、メモリリークが発生します。 |
注意 | |
---|---|
この関数は、このハッシュマップがスコープから外れるタイミングで自動的に呼び出されます。 |
SFXOldHashmap<SFXAnsiString, SInt32> strmap;
...
strmap.Clear(); // ハッシュマップを空にする
[ public, const ] Bool ContainsKey( KeyType key // 存在するか調べるキー );
この関数は、このハッシュマップに指定されたキーを持つペア要素(キーと値)が含まれるか判定します。
SFXOldHashmap<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 // 存在するか調べる値 );
この関数は、このハッシュマップに指定された値を持つペア要素(キーと値)が含まれるか判定します。
SFXOldHashmap<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 ] SFXOldHashmap< K, V > const & EmptyInstance(Void);
この関数は、空のハッシュマップを表すインスタンスを取得します。
[ public, const ] Bool Equals( SFXOldHashmap< K, V > const & collection // 比較するハッシュマップ );
この関数は、このハッシュマップが指定されたハッシュマップと等しいか判定します。
具体的には、2 つのハッシュマップに同じペア要素(キーと値)が格納されているか調べます。
注意 | |
---|---|
キーまたは値がポインタである場合、ポインタのアドレス値だけを比較します。 |
[ public, const ] ValueType Get( KeyType key // 取得する値のキー );
このハッシュマップに指定されたキーを持つペア要素があれば、ペア要素の値を返します。
存在しない場合は、null または 0 を返します。
この関数は、このハッシュマップ内の指定されたキーを持つペア要素の値を取得します。
注意 | |
---|---|
指定されたキーを持つペア要素が存在しない場合、エラーは発生せず、 この関数は 0 または null を返します。 |
SFXOldHashmap<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);
このハッシュマップのペア要素のキーに対応するキー列挙子
この関数は、このハッシュマップのペア要素のキーに対応するキー列挙子を取得します。
SFXOldHashmap::GetKeyIterator | SFXOldHashmap::GetValueIterator | SFXOldHashmap::GetValueEnumerator | SFXOldHashmap::ValueEnumerator | SFXOldHashmap::ValueIterator | SFXOldHashmap::KeyEnumerator | SFXOldHashmap::KeyIterator
[ public ] KeyIterator GetKeyIterator(Void);
このハッシュマップのペア要素のキーに対応するキー反復子
この関数は、このハッシュマップのペア要素のキーに対応するキー反復子を取得します。
SFXOldHashmap::GetKeyEnumerator | SFXOldHashmap::GetValueEnumerator | SFXOldHashmap::GetValueIterator | SFXOldHashmap::ValueEnumerator | SFXOldHashmap::ValueIterator | SFXOldHashmap::KeyEnumerator | SFXOldHashmap::KeyIterator
[ public, const ] UInt16 GetRatio(Void);
[ public, const ] SInt32 GetSize(Void);
このハッシュマップのサイズ(ペア要素の数)。
この関数は、このハッシュマップのサイズ(ペア要素の数)を取得します。
[ public, const ] UInt16 GetThreshold(Void);
ハッシュテーブルの大きさを拡張する閾値
この関数は、ハッシュテーブルの大きさを拡張する閾値を取得します。
[ public, const ] ValueEnumerator GetValueEnumerator(Void);
このハッシュマップのペア要素の値に対応する値列挙子
この関数は、このハッシュマップのペア要素の値に対応する値列挙子を取得します。
SFXOldHashmap::GetValueIterator | SFXOldHashmap::GetKeyIterator | SFXOldHashmap::GetKeyEnumerator | SFXOldHashmap::ValueEnumerator | SFXOldHashmap::ValueIterator | SFXOldHashmap::KeyEnumerator | SFXOldHashmap::KeyIterator
[ public ] ValueIterator GetValueIterator(Void);
このハッシュマップのペア要素の値に対応する値反復子
この関数は、このハッシュマップのペア要素の値に対応する値反復子を取得します。
SFXOldHashmap::GetValueEnumerator | SFXOldHashmap::GetKeyIterator | SFXOldHashmap::GetKeyEnumerator | SFXOldHashmap::ValueEnumerator | SFXOldHashmap::ValueIterator | SFXOldHashmap::KeyEnumerator | SFXOldHashmap::KeyIterator
[ public, const ] Bool IsEmpty(Void);
この関数は、このハッシュマップが空であるか判定します。
[ public ] SFCError Merge( SFXOldHashmap< K, V > const & collection // 統合するハッシュマップ );
この関数は、このハッシュマップと指定されたハッシュマップを統合します。
※処理中にエラーが発生した場合は、元の状態に戻します。
[ public ] Void Remove( KeyType key // 削除するキー );
この関数は、このハッシュマップから指定したキーを持つペア要素(キーと値)を削除します。
キーが文字列(SFXAnsiString / SFXWideString 型)である場合、 キーである文字列も自動的に解放されます。
注意 | |
---|---|
キーや値がクラスインスタンスや 4 バイトよりも大きなデータへのポインタの場合、 それらのデータは自動的に解放されません。 それらのデータは、ハッシュマップをクリアする直前に、 delete 文を使用して明示的にポインタが指すメモリ領域を解放する必要があります。 さもなければ、メモリリークが発生します。 |
[ public ] SFCError Set( SFXOldHashmap< K, V > const & collection // 設定するハッシュマップ );
[ public ] SFCError Set( KeyType key // 設定するキー ValueType value // 設定する値 );
この関数は、指定されたペア要素(キーと値のペア)をこのハッシュマップに設定します。 またはこのハッシュマップを指定されたハッシュマップに設定します。
※処理中にエラーが発生した場合は、元の状態に戻します。
空文字列 | |
---|---|
空文字列とは、 SFXAnsiString::EmptyInstance / SFXWideString::EmptyInstance 関数の戻り値のことです。 |
SFXOldHashmap<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 } }
SFXOldHashmap::Get | SFXOldHashmap::operator[] | SFXAnsiString::EmptyInstance | SFXWideString::EmptyInstance
SophiaFramework UNIVERSE 5.0.1 以降の仕様変更 | |
---|---|
SophiaFramework UNIVERSE 5.0.1 以降、この値を指定しても無効になりました。 ハッシュテーブルのサイズは、 要素数が SFXOldHashmap::SetThreshold 関数で設定された閾値を超えると、 閾値の範囲に収まるように素数の値で自動的に増加するように仕様が変更になっています。 |
この関数は、ハッシュテーブルの大きさを拡張する閾値を設定します。
ハッシュテーブルは、キーの数が増えると、効率化のため拡張されます。
この拡張は、以下の条件を満たすときに自動的に行われます。
要素数 > ハッシュテーブルのサイズ * 閾値 / 100
デフォルト値: 80
閾値の値 | |
---|---|
SFXOldHashmap では、ハッシュテーブルのキーが衝突した場合、ひとつのテーブルエントリーに複数の項目を格納できる設計になっているので、 SFXOldHashmap はハッシュテーブルのサイズ以上の要素を持つことができます。 そのため、SFXOldHashmap::SetThreshold 関数で設定する閾値に 100 よりも大きな数値を設定可能です。 |
[ public ] SFCError Swap( KeyType destination // 交換先のキー KeyType source // 交換元のキー );
この関数は、指定した 2 つの要素を交換します。
SFXOldHashmap<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 または 0 を返します。
このオペレーターは、このハッシュマップ内の指定したキーを持つペア要素の値を取得します。
注意 | |
---|---|
指定したキーを持つペア要素が存在しない場合、エラーは発生せず、 このオペレーターは 0 または null を返します。 |
enum DefaultEnum { DEFAULT_THRESHOLD = 80, // ハッシュテーブルの大きさを拡張する閾値 DEFAULT_RATIO = 50 // ハッシュテーブルの大きさを拡張する割合 };
SFXOldHashmap::SetThreshold | SFXOldHashmap::GetThreshold | SFXOldHashmap::SetRatio | SFXOldHashmap::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; };
このクラスは、ハッシュマップのペア要素のキーに対応するキー列挙子を保持するクラスです。
GetNext | 次の要素を取得します。要素がない場合 null または 0 を返します。 |
GetPrevious | 前の要素を取得します。要素がない場合 null または 0 を返します。 |
GetValue | 現在の要素に対する値を取得します。無効な場合は null を返します。 |
HasNext | 次の要素があるか調べます。 |
HasPrevious | 前の要素があるか調べます。 |
IsValid | 列挙子が有効であるか判定します。 |
SFXOldHashmap::KeyIterator | SFXOldHashmap::ValueEnumerator | SFXOldHashmap::ValueIterator | SFXOldHashmap::GetKeyEnumerator | SFXOldHashmap::GetKeyIterator | SFXOldHashmap::GetValueEnumerator | SFXOldHashmap::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); };
このクラスは、ハッシュマップのペア要素のキーに対応するキー反復子を保持するクラスです。
GetNext | 次の要素を取得します。要素がない場合 null または 0 を返します。 |
GetPrevious | 前の要素を取得します。要素がない場合 null または 0 を返します。 |
GetValue | 現在の要素に対する値を取得します。無効な場合は null を返します。 |
HasNext | 次の要素があるか調べます。 |
HasPrevious | 前の要素があるか調べます。 |
IsValid | 反復子が有効であるか判定します。 |
Remove | 反復子が指す要素を削除します。 |
SFXOldHashmap::KeyEnumerator | SFXOldHashmap::ValueEnumerator | SFXOldHashmap::ValueIterator | SFXOldHashmap::GetKeyEnumerator | SFXOldHashmap::GetKeyIterator | SFXOldHashmap::GetValueEnumerator | SFXOldHashmap::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; };
このクラスは、ハッシュマップのペア要素の値に対応する値列挙子を保持するクラスです。
GetNext | 次の要素を取得します。要素がない場合 null または 0 を返します。 |
GetPrevious | 前の要素を取得します。要素がない場合 null または 0 を返します。 |
GetKey | 現在の要素に対するキーを取得します。無効な場合は null を返します。 |
HasNext | 次の要素があるか調べます。 |
HasPrevious | 前の要素があるか調べます。 |
IsValid | 列挙子が有効であるか判定します。 |
SFXOldHashmap::ValueIterator | SFXOldHashmap::KeyEnumerator | SFXOldHashmap::KeyIterator | SFXOldHashmap::GetKeyEnumerator | SFXOldHashmap::GetKeyIterator | SFXOldHashmap::GetValueEnumerator | SFXOldHashmap::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); };
このクラスは、ハッシュマップのペア要素の値に対応する値反復子を保持するクラスです。
Set | 反復子が指す要素に対する値の内容を指定した値で設定します。 |
GetNext | 次の要素を取得します。要素がない場合 null または 0 を返します。 |
GetPrevious | 前の要素を取得します。要素がない場合 null または 0 を返します。 |
GetKey | 現在の要素に対するキーを取得します。無効な場合は null を返します。 |
HasNext | 次の要素があるか調べます。 |
HasPrevious | 前の要素があるか調べます。 |
IsValid | 反復子が有効であるか判定します。 |
Remove | 反復子が指す要素を削除します。 |
Copyright(c) 2002 - 2024 Sophia Cradle Incorporated All Rights Reserved. |