前のページ次のページ上に戻るホーム SophiaFramework UNIVERSE 5.3
SFXFlatHashMap
キーと値のペア要素を持つハッシュマップを操作するためのデータ構造です。 このクラスは、ペア要素の双方向リンクリストを内部で保持しません。
#include <SFXFlatHashMap.h.hpp>
class SFXFlatHashMap;
SFMTYPEDEFCLASS(SFXFlatHashMap)

継承図

SFXFlatHashMap クラスの継承図

協調図

SFXFlatHashMap クラスの協調図

解説

SFXFlatHashMap クラスは、 キーと値のペア要素を持つハッシュマップを操作するためのデータ構造です。

SFXFlatHashMap クラスは、 SFXLinkedHashMap クラスにあるペア要素の追加順双方向リンクリストを内部に保持しません。

ペア要素のキーと値は 4 バイト以下のデータでなければいけません。 5 バイト以上の SInt64 / UInt64 / Float64 型などのデータや、 クラスインスタンスをペア要素のキーや値にしたい場合はポインタを利用します。

ただし、ペア要素のキーには、 文字列(SFXAnsiString / SFXWideString)を格納できます。 この場合、要素毎の文字列のヒープの確保と解放はこのクラス内部で自動的に行われます。

ハッシュテーブルの大きさに対して要素の占有率が 45 % を超えると、 自動的にハッシュテーブルはリ拡張されてハッシュされます。

// 5 バイト以上のデータやクラスインスタンスは、ペア要素の値に格納できない
// ※文字列は、ペア要素のキーに格納できる
// SFXFlatHashMap<SFXAnsiString, SInt64> map64;          NG
// SFXFlatHashMap<SFXAnsiString, SFXAnsiString> mapstr;  NG

// ポインタはペア要素の値に格納できる
// 5 バイト以上のデータをペア要素の値にしたい場合は、ポインタを利用する
SFXFlatHashMap<SFXAnsiString, SInt64Ptr> map64;         // OK
SFXFlatHashMap<SFXAnsiString, SFXAnsiStringPtr> mapstr; // OK

参照

SFXLinkedHashMap | SFXHashmap | SFXAnsiString | SFXWideString | ハッシュマップ

メンバ

コンストラクタ/デストラクタ
SFXFlatHashMap( Void )
SFXFlatHashMap クラスのコンストラクタです。
パブリック関数
Void Clear( Void )
ハッシュマップを空にします。
Bool ContainsKey( KeyType key )
指定されたキーを持つペア要素が含まれるか判定します。
Bool ContainsValue( ValueType value )
指定された値を持つペア要素が含まれるか判定します。
static
SFXFlatHashMap< K, V > const &
EmptyInstance( Void )
空のハッシュマップを取得します。
Bool Equals( SFXFlatHashMap< K, V > const & collection )
指定されたハッシュマップと等しいか判定します。
ValueType Get( KeyType key , BoolPtr found = null )
指定されたキーを持つペア要素の値を取得します。
KeyEnumerator GetKeyEnumerator( Void )
ハッシュマップのペア要素のキーに対応するキー列挙子を取得します。
KeyIterator GetKeyIterator( Void )
ハッシュマップのペア要素のキーに対応するキー反復子を取得します。
SInt32 GetSize( Void )
ハッシュマップのサイズを取得します。
ValueEnumerator GetValueEnumerator( Void )
ハッシュマップのペア要素の値に対応する値列挙子を取得します。
ValueIterator GetValueIterator( Void )
ハッシュマップのペア要素の値に対応する値反復子を取得します。
Bool IsEmpty( Void )
ハッシュマップが空であるか判定します。
SFCError Merge( SFXFlatHashMap< K, V > const & collection )
ハッシュマップを統合します。
Void Remove( KeyType key )
指定されたキーを持つペア要素を削除します。
SFCError Set( SFXFlatHashMap< K, V > const & collection )
指定されたペア要素(キーと値のペア)を設定します。またはハッシュマップを設定します。
SFCError Set( KeyType key , ValueType value )
指定されたペア要素(キーと値のペア)を設定します。またはハッシュマップを設定します。
SFCError Swap( KeyType destination , KeyType source )
指定されたキーを持つペア要素の値を交換します。
ValueType operator[]( KeyType key )
指定されたキーを持つペア要素の値を取得します。
KeyEnumerator
ハッシュマップのペア要素のキーに対応するキー列挙子を保持するクラスです。
KeyIterator
ハッシュマップのペア要素のキーに対応するキー反復子を保持するクラスです。
ValueEnumerator
ハッシュマップのペア要素の値に対応する値列挙子を保持するクラスです。
ValueIterator
ハッシュマップのペア要素の値に対応する値反復子を保持するクラスです。

SFXFlatHashMap::SFXFlatHashMap
SFXFlatHashMap クラスのコンストラクタです。
[ public, explicit ]
SFXFlatHashMap(Void);

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

解説

この関数は、このハッシュマップを空にします。 このハッシュマップに割り当てられていたメモリ領域は解放されます。

この関数を実行した後、ハッシュマップのサイズは 0 になります。

キーが文字列(SFXAnsiString / SFXWideString 型)である場合、 キーである文字列も自動的に解放されます。

[Caution] 注意

キーや値がクラスインスタンスや 4 バイトよりも大きなデータへのポインタの場合、 ポインタが指すメモリ領域は解放されません。

ハッシュマップをクリアする前に、 delete 文を使用して明示的にその領域を解放する必要があります。 さもなければ、メモリリークが発生します。

[Note] 注意
この関数は、このハッシュマップがスコープから外れるタイミングで自動的に呼び出されます。

使用例

SFXFlatHashMap<SFXAnsiString, SInt32> strmap;
 
...

strmap.Clear();   // ハッシュマップを空にする

参照

SFXFlatHashMap::Remove | SFXFlatHashMap::GetSize


SFXFlatHashMap::ContainsKey
指定されたキーを持つペア要素が含まれるか判定します。
[ public, const ]
Bool ContainsKey(
    KeyType key   // 存在するか調べるキー
);

戻り値

  • 指定されたキーを持つペア要素が存在するとき: true
  • そうでないとき: false

解説

この関数は、このハッシュマップに指定されたキーを持つペア要素(キーと値)が含まれるか判定します。

使用例

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

参照

SFXFlatHashMap::ContainsValue


SFXFlatHashMap::ContainsValue
指定された値を持つペア要素が含まれるか判定します。
[ public, const ]
Bool ContainsValue(
    ValueType value   // 存在するか調べる値
);

戻り値

  • 指定された値を持つペア要素が存在するとき: true
  • そうでないとき: false

解説

この関数は、このハッシュマップに指定された値を持つペア要素(キーと値)が含まれるか判定します。

使用例

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

参照

SFXFlatHashMap::ContainsKey


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

戻り値

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

解説

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

参照

SFXFlatHashMap::IsEmpty


SFXFlatHashMap::Equals
指定されたハッシュマップと等しいか判定します。
[ public, const ]
Bool Equals(
    SFXFlatHashMap< K, V > const & collection   // 比較するハッシュマップ
);

戻り値

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

解説

この関数は、このハッシュマップが指定されたハッシュマップと等しいか判定します。

具体的には、2 つのハッシュマップに同じペア要素(キーと値)が格納されているか調べます。

[Caution] 注意
キーまたは値がポインタである場合、ポインタのアドレス値だけを比較します。

SFXFlatHashMap::Get
指定されたキーを持つペア要素の値を取得します。
[ public, const ]
ValueType Get(
    KeyType key            // 取得する値を持つペア要素のキー
    BoolPtr found = null   // キーの有無
);

戻り値

このハッシュマップに指定されたキーを持つペア要素があれば、ペア要素の値を返します。

存在しない場合は、null または 0 を返します。

解説

この関数は、このハッシュマップ内の指定されたキーを持つペア要素の値を取得します。

指定されたキーを持つペア要素が存在する場合、第 2 引数 found に true が渡されます。 そうでない場合は、false が渡されます。

[Caution] 注意
指定されたキーを持つペア要素が存在しない場合、エラーは発生せず、 この関数は 0 または null を返します。

使用例

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

参照

SFXFlatHashMap::operator[] | SFXFlatHashMap::Set


SFXFlatHashMap::GetKeyEnumerator
ハッシュマップのペア要素のキーに対応するキー列挙子を取得します。
[ public, const ]
KeyEnumerator GetKeyEnumerator(Void);

戻り値

このハッシュマップのペア要素のキーに対応するキー列挙子

解説

この関数は、このハッシュマップのペア要素のキーに対応するキー列挙子を取得します。

参照

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


SFXFlatHashMap::GetKeyIterator
ハッシュマップのペア要素のキーに対応するキー反復子を取得します。
[ public ]
KeyIterator GetKeyIterator(Void);

戻り値

このハッシュマップのペア要素のキーに対応するキー反復子

解説

この関数は、このハッシュマップのペア要素のキーに対応するキー反復子を取得します。

参照

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


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

戻り値

このハッシュマップのサイズ(ペア要素の数)。

解説

この関数は、このハッシュマップのサイズ(ペア要素の数)を取得します。


SFXFlatHashMap::GetValueEnumerator
ハッシュマップのペア要素の値に対応する値列挙子を取得します。
[ public, const ]
ValueEnumerator GetValueEnumerator(Void);

戻り値

このハッシュマップのペア要素の値に対応する値列挙子

解説

この関数は、このハッシュマップのペア要素の値に対応する値列挙子を取得します。

参照

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


SFXFlatHashMap::GetValueIterator
ハッシュマップのペア要素の値に対応する値反復子を取得します。
[ public ]
ValueIterator GetValueIterator(Void);

戻り値

このハッシュマップのペア要素の値に対応する値反復子

解説

この関数は、このハッシュマップのペア要素の値に対応する値反復子を取得します。

参照

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


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

戻り値

  • このハッシュマップが空であるとき: true
  • そうでないとき: false

解説

この関数は、このハッシュマップが空であるか判定します。

参照

SFXFlatHashMap::EmptyInstance


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

戻り値

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

解説

この関数は、このハッシュマップと指定されたハッシュマップを統合します。

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


SFXFlatHashMap::Remove
指定されたキーを持つペア要素を削除します。
[ public ]
Void Remove(
    KeyType key   // 削除するペア要素のキー
);

解説

この関数は、このハッシュマップから指定したキーを持つペア要素(キーと値)を削除します。

キーが文字列(SFXAnsiString / SFXWideString 型)である場合、 キーである文字列も自動的に解放されます。

[Caution] 注意

キーや値がクラスインスタンスや 4 バイトよりも大きなデータへのポインタの場合、 それらのデータは自動的に解放されません。

それらのデータは、ハッシュマップをクリアする直前に、 delete 文を使用して明示的にポインタが指すメモリ領域を解放する必要があります。 さもなければ、メモリリークが発生します。

参照

SFXFlatHashMap::Set | SFXFlatHashMap::Clear


SFXFlatHashMap::Set
指定されたペア要素(キーと値のペア)を設定します。またはハッシュマップを設定します。
[ public ]
SFCError Set(
    SFXFlatHashMap< K, V > const & collection   // 設定するハッシュマップ
);
[ public ]
SFCError Set(
    KeyType key       // 設定するキー
    ValueType value   // 設定する値
);

戻り値

  • 成功したとき: SFERR_NO_ERROR
  • メモリ不足のとき: SFERR_NO_MEMOERY
  • キーが空文字列であるとき: SFERR_INVALID_PARAM

解説

この関数は、指定されたペア要素(キーと値のペア)をこのハッシュマップに設定します。 またはこのハッシュマップを指定されたハッシュマップに設定します。

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

[Note] 空文字列

空文字列とは、 SFXAnsiString::EmptyInstance / SFXWideString::EmptyInstance 関数の戻り値のことです。

使用例

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

参照

SFXFlatHashMap::Get | SFXFlatHashMap::operator[] | SFXAnsiString::EmptyInstance | SFXWideString::EmptyInstance


SFXFlatHashMap::Swap
指定されたキーを持つペア要素の値を交換します。
[ public ]
SFCError Swap(
    KeyType destination   // 交換先のキー
    KeyType source        // 交換元のキー
);

戻り値

  • 成功したとき: SFERR_NO_ERROR
  • 指定されたキーを持つペア要素が存在しないとき: SFERR_INVALID_PARAM

解説

この関数は、指定したキーを持つペア要素の値を交換します。

使用例

SFXFlatHashMap<SFXAnsiString, SInt32> strmap;

// ペア要素 (キー: "mike", 値: 2) を設定する
if (strmap.Set("mike", 2) == SFERR_NO_ERROR) {

    // ペア要素 (キー: "john", 値: 1) を設定する
    if (strmap.Set("john", 1) == SFERR_NO_ERROR) {

        // 2 つのペア要素の値を交換する
        if (strmap.Swap("mike", "john") == SFERR_NO_ERROR) {

            // "mike" をキーに持つペア要素の値をデバッグウィンドウに表示する
            TRACE("%d", strmap.Get("mike"));  // 1
        }
    }
}

SFXFlatHashMap::operator[]
指定されたキーを持つペア要素の値を取得します。
[ public, const ]
ValueType operator[](
    KeyType key   // 取得するキーの位置
);

戻り値

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

存在しない場合は、null または 0 を返します。

解説

このオペレーターは、このハッシュマップ内の指定したキーを持つペア要素の値を取得します。

[Caution] 注意
指定したキーを持つペア要素が存在しない場合、エラーは発生せず、 このオペレーターは 0 または null を返します。

参照

SFXFlatHashMap::Get | SFXFlatHashMap::Set


SFXFlatHashMap::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;
};

解説

このクラスは、ハッシュマップのペア要素のキーに対応するキー列挙子を保持するクラスです。

GetNext 次の要素を取得します。要素がない場合 null または 0 を返します。
GetPrevious 前の要素を取得します。要素がない場合 null または 0 を返します。
GetValue 現在の要素に対する値を取得します。無効な場合は null を返します。
HasNext 次の要素があるか調べます。
HasPrevious 前の要素があるか調べます。
IsValid 列挙子が有効であるか判定します。

参照

SFXFlatHashMap::KeyIterator | SFXFlatHashMap::ValueEnumerator | SFXFlatHashMap::ValueIterator | SFXFlatHashMap::GetKeyEnumerator | SFXFlatHashMap::GetKeyIterator | SFXFlatHashMap::GetValueEnumerator | SFXFlatHashMap::GetValueIterator


SFXFlatHashMap::KeyIterator
ハッシュマップのペア要素のキーに対応するキー反復子を保持するクラスです。
[ public ]

SFMTYPEDEFCLASS(KeyIterator)
class KeyIterator  {
    public:
        explicit            KeyIterator             (Void);
        SFCError            SetValue                (ValueType type);
        KeyType             GetNext                 (Void);
        KeyType             GetPrevious             (Void);
        ValueType           GetValue                (Void) const;
        Bool                HasNext                 (Void) const;
        Bool                HasPrevious             (Void) const;
        Bool                IsValid                 (Void) const;
};

解説

このクラスは、ハッシュマップのキーに関するキー反復子を保持するクラスです。

SetValue 反復子が指す要素に対する値の内容を指定した値で設定します。
GetNext 次の要素を取得します。要素がない場合 null または 0 を返します。
GetPrevious 前の要素を取得します。要素がない場合 null または 0 を返します。
GetValue 現在の要素に対する値を取得します。無効な場合は null を返します。
HasNext 次の要素があるか調べます。
HasPrevious 前の要素があるか調べます。
IsValid 反復子が有効であるか判定します。

参照

SFXFlatHashMap::KeyEnumerator | SFXFlatHashMap::ValueEnumerator | SFXFlatHashMap::ValueIterator | SFXFlatHashMap::GetKeyEnumerator | SFXFlatHashMap::GetKeyIterator | SFXFlatHashMap::GetValueEnumerator | SFXFlatHashMap::GetValueIterator


SFXFlatHashMap::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;
};

解説

このクラスは、ハッシュマップのペア要素の値に対応する値列挙子を保持するクラスです。

GetNext 次の要素を取得します。要素がない場合 null または 0 を返します。
GetPrevious 前の要素を取得します。要素がない場合 null または 0 を返します。
GetKey 現在の要素に対するキーを取得します。無効な場合は null を返します。
HasNext 次の要素があるか調べます。
HasPrevious 前の要素があるか調べます。
IsValid 列挙子が有効であるか判定します。

参照

SFXFlatHashMap::ValueIterator | SFXFlatHashMap::KeyEnumerator | SFXFlatHashMap::KeyIterator | SFXFlatHashMap::GetKeyEnumerator | SFXFlatHashMap::GetKeyIterator | SFXFlatHashMap::GetValueEnumerator | SFXFlatHashMap::GetValueIterator


SFXFlatHashMap::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;
};

解説

このクラスは、ハッシュマップのペア要素の値に対応する値反復子を保持するクラスです。

Set 反復子が指す要素に対する値の内容を指定した値で設定します。
GetNext 次の要素を取得します。要素がない場合 null または 0 を返します。
GetPrevious 前の要素を取得します。要素がない場合 null または 0 を返します。
GetKey 現在の要素に対するキーを取得します。無効な場合は null を返します。
HasNext 次の要素があるか調べます。
HasPrevious 前の要素があるか調べます。
IsValid 反復子が有効であるか判定します。

参照

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