前のページ次のページ上に戻るホーム BREW C++ ライブラリ & GUI フレームワーク & XML ミドルウェア : SophiaFramework UNIVERSE 5.0
SFXHashmap
ハッシュテーブルを利用して検索効率を高めたマップを表すクラスです。
#include <SFXHashmap.h.hpp>
class SFXHashmap;
SFMTYPEDEFCLASS(SFXHashmap)

継承図

SFXHashmap クラスの継承図

協調図

SFXHashmap クラスの協調図

解説

ハッシュマップ ( 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
[Caution] 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
ハッシュマップの値に関する反復子を保持するクラスです。

SFXHashmap::SFXHashmap
SFXHashmap クラスのコンストラクタです。
[ public, explicit ]
SFXHashmap(Void);
[ public, explicit ]
SFXHashmap(
    UInt16 threshold   // ハッシュテーブルの拡張を行う閾値
    UInt16 ratio       // 拡張される割合
);

SFXHashmap::Clear
ハッシュマップを空にします。
[ public ]
Void Clear(Void);

解説

文字列キーを利用する場合は、キー管理用のリソースは自動的に解放されます。

格納されているキーや値がクラスのインスタンスへのポインタの場合、そのインスタンスは自動的に解放されません。

使用例

SFXHashmap<SFXAnsiString, SInt32> strmap;
 
...

strmap.Clear();   // すべてのデータと管理用メモリを解放する

参照

SFXHashmap::Remove


SFXHashmap::ContainsKey
指定したキーが含まれるか判定します。
[ public, const ]
Bool ContainsKey(
    KeyType key   // 存在するか調べるキー
);

戻り値

  • キーがあるとき : true
  • キーがないとき : false

使用例

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
    }
}

参照

SFXHashmap::ContainsValue


SFXHashmap::ContainsValue
指定した値が含まれるか判定します。
[ public, const ]
Bool ContainsValue(
    ValueType value   // 存在するか調べる値
);

戻り値

  • 値があるとき : true
  • 値がないとき : false

使用例

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
    }
}

参照

SFXHashmap::ContainsKey


SFXHashmap::EmptyInstance
空のハッシュマップを取得します。
[ public, static ]
SFXHashmap< K, V > const & EmptyInstance(Void);

解説

空のハッシュマップを表すインスタンスを取得します。


SFXHashmap::Equals
ハッシュマップが等しいか比較します。
[ public, const ]
Bool Equals(
    SFXHashmap< K, V > const & collection   // 比較するハッシュマップ
);

戻り値

  • 等しいとき: true
  • 異なるとき : false

解説

2 つのハッシュマップに同じキーとその値の要素が同じ順で格納されているか調べます。

キーまたはその値がクラスのインスタンスへのポインタの場合、アドレスを比較します。


SFXHashmap::Get
指定したキーに対する値を取得します。
[ 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
    }
}

参照

SFXHashmap::Set


SFXHashmap::GetKeyEnumerator
ハッシュマップのキーに関する列挙子を取得します。
[ public, const ]
KeyEnumerator GetKeyEnumerator(Void);

参照

SFXHashmap::GetKeyIterator | SFXHashmap::GetValueIterator | SFXHashmap::GetValueEnumerator | SFXHashmap::ValueEnumerator | SFXHashmap::ValueIterator | SFXHashmap::KeyEnumerator | SFXHashmap::KeyIterator


SFXHashmap::GetKeyIterator
ハッシュマップのキーに関する反復子を取得します。
[ public ]
KeyIterator GetKeyIterator(Void);

参照

SFXHashmap::GetKeyEnumerator | SFXHashmap::GetValueEnumerator | SFXHashmap::GetValueIterator | SFXHashmap::ValueEnumerator | SFXHashmap::ValueIterator | SFXHashmap::KeyEnumerator | SFXHashmap::KeyIterator


SFXHashmap::GetRatio
【SF UNIVERSE 5.0.1 から無効】ハッシュテーブルの大きさを拡張する割合を取得します。
[ public, const ]
UInt16 GetRatio(Void);

参照

SFXHashmap::SetRatio


SFXHashmap::GetSize
サイズ(ハッシュマップ キーの総数)を取得します。
[ public, const ]
SInt32 GetSize(Void);

SFXHashmap::GetThreshold
ハッシュテーブルの大きさを拡張する閾値を取得します。
[ public, const ]
UInt16 GetThreshold(Void);

参照

SFXHashmap::SetThreshold


SFXHashmap::GetValueEnumerator
ハッシュマップの値に関する列挙子を取得します。
[ public, const ]
ValueEnumerator GetValueEnumerator(Void);

参照

SFXHashmap::GetValueIterator | SFXHashmap::GetKeyIterator | SFXHashmap::GetKeyEnumerator | SFXHashmap::ValueEnumerator | SFXHashmap::ValueIterator | SFXHashmap::KeyEnumerator | SFXHashmap::KeyIterator


SFXHashmap::GetValueIterator
ハッシュマップの値に関する反復子を取得します。
[ public ]
ValueIterator GetValueIterator(Void);

参照

SFXHashmap::GetValueEnumerator | SFXHashmap::GetKeyIterator | SFXHashmap::GetKeyEnumerator | SFXHashmap::ValueEnumerator | SFXHashmap::ValueIterator | SFXHashmap::KeyEnumerator | SFXHashmap::KeyIterator


SFXHashmap::IsEmpty
ハッシュマップが空であるか判定します。
[ public, const ]
Bool IsEmpty(Void);

戻り値

  • 空のとき : true
  • 空でないとき : false

SFXHashmap::Merge
ハッシュマップを統合します。
[ public ]
SFCError Merge(
    SFXHashmap< K, V > const & collection   // 統合するハッシュマップ
);

戻り値

  • 成功したとき : SFERR_NO_ERROR
  • メモリ不足のとき : SFERR_NO_MEMOERY
  • 失敗したとき : SFERR_INVALID_STATE

解説

処理中に何らかのエラーが発生した場合は、元の状態に戻します。


SFXHashmap::Remove
指定したキーを削除します。
[ public ]
Void Remove(
    KeyType key   // 削除するキー
);

SFXHashmap::Set
キーに対応する値を設定します。またはハッシュマップを設定します。
[ public ]
SFCError Set(
    SFXHashmap< K, V > const & collection   // 設定するハッシュマップ
);
[ public ]
SFCError Set(
    KeyType key       // 設定するキー
    ValueType value   // 設定する値
);

戻り値

  • 成功したとき : SFERR_NO_ERROR
  • メモリ不足のとき : SFERR_NO_MEMOERY
  • 失敗したとき : SFERR_INVALID_STATE

解説

処理中に何らかのエラーが発生した場合は、元の状態に戻します。

使用例

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
    }
}

参照

SFXHashmap::Get


SFXHashmap::SetRatio
【SF UNIVERSE 5.0.1 から無効】ハッシュテーブルの大きさを拡張する割合を設定します。
[ public ]
Void SetRatio(
    UInt16 param   // 設定する割合 (%)
);

解説

ハッシュテーブルは、キーの数が増えた時に効率化のためにサイズが拡張されます。

テーブルの大きさを増加させる割合を百分率で指定します。

[Caution] SophiaFramework UNIVERSE 5.0.1 以降の仕様変更

SophiaFramework UNIVERSE 5.0.1 以降、この値を指定しても無効になりました。

ハッシュテーブルのサイズは、 要素数が SFXHashmap::SetThreshold 関数で設定された閾値を超えると、 閾値の範囲に収まるように素数の値で自動的に増加するように仕様が変更になっています。

参照

SFXHashmap::GetRatio | SFXHashmap::SetThreshold | SFXHashmap::DefaultEnum


SFXHashmap::SetThreshold
ハッシュテーブルの大きさを拡張する閾値を設定します。
[ public ]
Void SetThreshold(
    UInt16 param   // 設定する閾値 (%)
);

解説

ハッシュテーブルは、キーの数が増えた時に効率化のためにサイズが拡張されます。

以下の条件を満たすときに自動で行われます。

要素数 > ハッシュテーブルのサイズ * 閾値 / 100

デフォルト値 : 80。

[Note] 閾値の値

SFXHashmap では、ハッシュテーブルのキーが衝突した場合、ひとつのテーブルエントリーに複数の項目を格納できる設計になっているので、 SFXHashmap はハッシュテーブルのサイズ以上の要素を持つことができます。

そのため、SFXHashmap::SetThreshold 関数で設定する閾値に 100 よりも大きな数値を設定可能です。

参照

SFXHashmap::GetThreshold | SFXHashmap::DefaultEnum


SFXHashmap::Swap
指定したキーに対する値を交換します。
[ public ]
SFCError Swap(
    KeyType destination   // 交換先のキー
    KeyType source        // 交換元のキー
);

戻り値

  • 成功したとき : SFERR_NO_ERROR
  • キーが存在しないとき : SFERR_INVALID_PARAM

使用例

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
        }
    }
}

SFXHashmap::operator[]
指定したキーに対する値を取得します。
[ public, const ]
ValueType operator[](
    KeyType key   // 取得するキーの位置
);

戻り値

指定したキーに対するマッピングが存在すればその値を返します。

存在しなければ null を返します。

参照

SFXHashmap::Set


SFXHashmap::DefaultEnum
ハッシュテーブルの大きさを拡張する閾値と割合の既定値を表します。
enum DefaultEnum {
    DEFAULT_THRESHOLD = 80,     // ハッシュテーブルの大きさを拡張する閾値
    DEFAULT_RATIO     = 50      // ハッシュテーブルの大きさを拡張する割合
};

参照

SFXHashmap::SetThreshold | SFXHashmap::GetThreshold | SFXHashmap::SetRatio | SFXHashmap::GetRatio


SFXHashmap::KeyEnumerator
ハッシュマップのキーに関する列挙子を保持するクラスです。
[ 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


SFXHashmap::KeyIterator
ハッシュマップのキーに関する反復子を保持するクラスです。
[ 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


SFXHashmap::ValueEnumerator
ハッシュマップの値に関する列挙子を保持するクラスです。
[ 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


SFXHashmap::ValueIterator
ハッシュマップの値に関する反復子を保持するクラスです。
[ 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 反復子が指す要素を削除します。

参照

SFXHashmap::ValueEnumerator | SFXHashmap::KeyEnumerator | SFXHashmap::KeyIterator | SFXHashmap::GetKeyEnumerator | SFXHashmap::GetKeyIterator | SFXHashmap::GetValueEnumerator | SFXHashmap::GetValueIterator