unordered_map


マクロ定義

#define CSTL_UNORDERED_MAP_INTERFACE(Name, KeyType, ValueType)
 unordered_map用インターフェイスマクロ
#define CSTL_UNORDERED_MAP_IMPLEMENT(Name, KeyType, ValueType, Hasher, Compare)
 unordered_map用実装マクロ
#define CSTL_UNORDERED_MULTIMAP_INTERFACE(Name, KeyType, ValueType)
 unordered_multimap用インターフェイスマクロ
#define CSTL_UNORDERED_MULTIMAP_IMPLEMENT(Name, KeyType, ValueType, Hasher, Compare)
 unordered_multimap用実装マクロ
#define CSTL_EQUAL_TO(x, y)   ((x) == (y) ? 0 : 1)
 整数比較

型定義

typedef struct
UnorderedMap 
UnorderedMap
 unordered_map/unordered_multimapの型
typedef PRIVATE_TYPE * UnorderedMapIterator
 イテレータ
typedef PRIVATE_TYPE * UnorderedMapLocalIterator
 ローカルイテレータ

関数

UnorderedMapUnorderedMap_new (void)
 生成
UnorderedMapUnorderedMap_new_rehash (size_t n)
 バケット数を指定して生成
void UnorderedMap_delete (UnorderedMap *self)
 破棄
size_t UnorderedMap_size (UnorderedMap *self)
 要素数を取得
int UnorderedMap_empty (UnorderedMap *self)
 空チェック
UnorderedMapIterator UnorderedMap_begin (UnorderedMap *self)
 最初の要素のイテレータ
UnorderedMapIterator UnorderedMap_end (UnorderedMap *self)
 最後の要素の次のイテレータ
UnorderedMapIterator UnorderedMap_next (UnorderedMapIterator pos)
 次のイテレータ
KeyT const * UnorderedMap_key (UnorderedMapIterator pos)
 イテレータによる要素のキーのアクセス
ValueT * UnorderedMap_value (UnorderedMapIterator pos)
 イテレータによる要素の値のアクセス
ValueT * UnorderedMap_at (UnorderedMap *self, KeyT key)
 キーとペアになる値のアクセス(unordered_map専用)
UnorderedMapIterator UnorderedMap_insert (UnorderedMap *self, KeyT key, ValueT value, int *success)
 要素を挿入(unordered_map専用)
UnorderedMapIterator UnorderedMap_insert_ref (UnorderedMap *self, KeyT key, ValueT const *value, int *success)
 参照渡しで要素を挿入(unordered_map専用)
UnorderedMapIterator UnorderedMap_insert (UnorderedMap *self, KeyT key, ValueT value)
 要素を挿入(unordered_multimap専用)
UnorderedMapIterator UnorderedMap_insert_ref (UnorderedMap *self, KeyT key, ValueT const *value)
 参照渡しで要素を挿入(unordered_multimap専用)
int UnorderedMap_insert_range (UnorderedMap *self, UnorderedMapIterator first, UnorderedMapIterator last)
 指定範囲の要素を挿入
UnorderedMapIterator UnorderedMap_erase (UnorderedMap *self, UnorderedMapIterator pos)
 要素を削除
UnorderedMapIterator UnorderedMap_erase_range (UnorderedMap *self, UnorderedMapIterator first, UnorderedMapIterator last)
 指定範囲の要素を削除
size_t UnorderedMap_erase_key (UnorderedMap *self, KeyT key)
 指定キーの要素を削除
void UnorderedMap_clear (UnorderedMap *self)
 全要素を削除
void UnorderedMap_swap (UnorderedMap *self, UnorderedMap *x)
 交換
size_t UnorderedMap_count (UnorderedMap *self, KeyT key)
 指定キーの要素をカウント
UnorderedMapIterator UnorderedMap_find (UnorderedMap *self, KeyT key)
 指定キーの要素を検索
void UnorderedMap_equal_range (UnorderedMap *self, KeyT key, UnorderedMapIterator *first, UnorderedMapIterator *last)
 指定キーの要素の範囲を取得
size_t UnorderedMap_bucket_count (UnorderedMap *self)
 バケット数を取得
size_t UnorderedMap_bucket_size (UnorderedMap *self, size_t idx)
 一つのバケットの中の要素数を取得
size_t UnorderedMap_bucket (UnorderedMap *self, KeyT key)
 バケットのインデックスを取得
UnorderedMapLocalIterator UnorderedMap_bucket_begin (UnorderedMap *self, size_t idx)
 一つのバケットの中の最初の要素のローカルイテレータ
UnorderedMapLocalIterator UnorderedMap_bucket_end (UnorderedMap *self, size_t idx)
 一つのバケットの中の最後の要素の次のローカルイテレータ
UnorderedMapLocalIterator UnorderedMap_bucket_next (UnorderedMapLocalIterator pos)
 次のローカルイテレータ
float UnorderedMap_load_factor (UnorderedMap *self)
 ロードファクターを取得
float UnorderedMap_get_max_load_factor (UnorderedMap *self)
 ロードファクターの上限を取得
void UnorderedMap_set_max_load_factor (UnorderedMap *self, float z)
 ロードファクターの上限を設定
int UnorderedMap_rehash (UnorderedMap *self, size_t n)
 バケットを拡張して再ハッシュ
size_t UnorderedMap_hash_string (const char *key)
 文字列用ハッシュ関数
size_t UnorderedMap_hash_wstring (const wchar_t *key)
 ワイド文字列用ハッシュ関数
size_t UnorderedMap_hash_char (char key)
 char用ハッシュ関数
size_t UnorderedMap_hash_schar (signed char key)
 signed char用ハッシュ関数
size_t UnorderedMap_hash_uchar (unsigned char key)
 unsigned char用ハッシュ関数
size_t UnorderedMap_hash_short (short key)
 short用ハッシュ関数
size_t UnorderedMap_hash_ushort (unsigned short key)
 unsigned short用ハッシュ関数
size_t UnorderedMap_hash_int (int key)
 int用ハッシュ関数
size_t UnorderedMap_hash_uint (unsigned int key)
 unsigned int用ハッシュ関数
size_t UnorderedMap_hash_long (long key)
 long用ハッシュ関数
size_t UnorderedMap_hash_ulong (unsigned long key)
 unsigned long用ハッシュ関数

説明

unordered_mapはmapと同様に、キーと値のペアを要素とする連想コンテナである。 mapは二分木で実装されるのに対し、unordered_mapはハッシュテーブルで実装される。 同じキーの要素を2個以上挿入することはできない。 挿入した要素のキーは読み出し専用となる。 要素の挿入・削除・キーの検索の計算量は大抵の場合O(1)であるが、最悪の場合O(N)となる。

unordered_multimapはキーの重複が許されることと、キーとペアになる値の直接アクセスが不可能であることを除き、unordered_mapと同じである。

ハッシュテーブルの実装において、ハッシュ値の衝突はチェイン法によって解決する。 チェイン法で使われるリンクリストをバケット と呼ぶこととする。 また、バケットの平均要素数(全要素数 / バケット数)をロードファクター と呼ぶ。 要素挿入後のロードファクターが、設定されているロードファクターの上限を超える場合、 自動的にバケットを拡張して再ハッシュが行われる。

unordered_map/unordered_multimapを使うには、<cstl/unordered_map.h>をインクルードし、以下のマクロを用いてコードを展開する必要がある。

#include <cstl/unordered_map.h>

#define CSTL_UNORDERED_MAP_INTERFACE(Name, KeyType, ValueType)
#define CSTL_UNORDERED_MAP_IMPLEMENT(Name, KeyType, ValueType, Hasher, Compare)

#define CSTL_UNORDERED_MULTIMAP_INTERFACE(Name, KeyType, ValueType)
#define CSTL_UNORDERED_MULTIMAP_IMPLEMENT(Name, KeyType, ValueType, Hasher, Compare)

CSTL_UNORDERED_MAP_INTERFACE() は任意の名前と要素の型のunordered_mapのインターフェイスを展開する。 CSTL_UNORDERED_MAP_IMPLEMENT() はその実装を展開する。

CSTL_UNORDERED_MULTIMAP_INTERFACE() は任意の名前と要素の型のunordered_multimapのインターフェイスを展開する。 CSTL_UNORDERED_MULTIMAP_IMPLEMENT() はその実装を展開する。

使用例:
#include <stdio.h>
#include <string.h>
#include <cstl/unordered_map.h>

/* unordered_mapのインターフェイスと実装を展開 */
CSTL_UNORDERED_MAP_INTERFACE(StrIntUMap, const char *, int)
CSTL_UNORDERED_MAP_IMPLEMENT(StrIntUMap, const char *, int, 
        StrIntUMap_hash_string, strcmp)

/* unordered_multimapのインターフェイスと実装を展開 */
CSTL_UNORDERED_MULTIMAP_INTERFACE(IntIntUMMap, int, int)
CSTL_UNORDERED_MULTIMAP_IMPLEMENT(IntIntUMMap, int, int, 
        StrIntUMap_hash_int, CSTL_EQUAL_TO)

int main(void)
{
    { /* unordered_map */
        /* イテレータ */
        StrIntUMapIterator pos;
        /* キーが文字列、値がintのunordered_mapを生成。
         * 型名・関数のプレフィックスはStrIntUMapとなる。 */
        StrIntUMap *umap = StrIntUMap_new();

        /* 要素を挿入 */
        StrIntUMap_insert(umap, "aaa", 1, NULL);
        StrIntUMap_insert(umap, "bbb", 2, NULL);
        /* キーによる値の読み書き */
        printf("%d\n", *StrIntUMap_at(umap, "aaa"));
        *StrIntUMap_at(umap, "bbb") = 3;
        *StrIntUMap_at(umap, "ccc") = 4; /* 存在しないキーの要素は自動的に挿入 */
        /* 要素数 */
        printf("size: %d\n", StrIntUMap_size(umap));
        for (pos = StrIntUMap_begin(umap); pos != StrIntUMap_end(umap); 
                pos = StrIntUMap_next(pos)) {
            /* イテレータによる要素の読み書き */
            printf("%s: %d,", *StrIntUMap_key(pos), *StrIntUMap_value(pos));
            *StrIntUMap_value(pos) += 1;
            printf("%d\n", *StrIntUMap_value(pos));
        }

        /* 使い終わったら破棄 */
        StrIntUMap_delete(umap);
    }
    { /* unordered_multimap */
        /* イテレータ */
        IntIntUMMapIterator pos;
        IntIntUMMapIterator first, last;
        /* キーがint、値がintのunordered_multimapを生成。
         * 型名・関数のプレフィックスはIntIntUMMapとなる。 */
        IntIntUMMap *umap = IntIntUMMap_new();

        /* 要素を挿入 */
        IntIntUMMap_insert(umap, 1, 1);
        IntIntUMMap_insert(umap, 2, 2);
        IntIntUMMap_insert(umap, 1, 3); /* 重複したキーを挿入できる */
        /* 要素数 */
        printf("size: %d\n", IntIntUMMap_size(umap));

        /* キーが1の要素を探索 */
        IntIntUMMap_equal_range(umap, 1, &first, &last);
        for (pos = first; pos != last; pos = IntIntUMMap_next(pos)) {
            /* イテレータによる要素の読み書き */
            printf("%d: %d,", *IntIntUMMap_key(pos), *IntIntUMMap_value(pos));
            *IntIntUMMap_value(pos) += 1;
            printf("%d\n", *IntIntUMMap_value(pos));
        }

        /* 使い終わったら破棄 */
        IntIntUMMap_delete(umap);
    }
    return 0;
}
注意:
以下に説明する型定義・関数は、 CSTL_UNORDERED_MAP_INTERFACE(Name, KeyType, ValueType) , CSTL_UNORDERED_MULTIMAP_INTERFACE(Name, KeyType, ValueType)NameUnorderedMap , KeyTypeKeyT , ValueTypeValueT を仮に指定した場合のものである。 実際に使用する際には、使用例のように適切な引数を指定すること。
覚え書き:
unordered_map専用/unordered_multimap専用と記した関数以外の関数は、unordered_map/unordered_multimap共通の関数である。

コンパイラオプションによって、NDEBUGマクロが未定義かつCSTL_DEBUGマクロが定義されているならば、 assertマクロが有効になり、関数の事前条件に違反するとプログラムの実行を停止する。


マクロ定義

#define CSTL_UNORDERED_MAP_INTERFACE ( Name,
KeyType,
ValueType   ) 

unordered_map用インターフェイスマクロ

任意の名前と要素の型のunordered_mapのインターフェイスを展開する。

引数:
Name 既存の型と重複しない任意の名前。unordered_mapの型名と関数のプレフィックスになる
KeyType 任意の要素のキーの型
ValueType 任意の要素の値の型
注意:
引数は CSTL_UNORDERED_MAP_IMPLEMENT() の引数と同じものを指定すること。

KeyType , ValueType を括弧で括らないこと。

覚え書き:
KeyType に構造体型を指定することは、構造体コピーによってパフォーマンスが低下する可能性があるため推奨されない。

#define CSTL_UNORDERED_MAP_IMPLEMENT ( Name,
KeyType,
ValueType,
Hasher,
Compare   ) 

unordered_map用実装マクロ

CSTL_UNORDERED_MAP_INTERFACE()で展開したインターフェイスの実装を展開する。

引数:
Name 既存の型と重複しない任意の名前。unordered_mapの型名と関数のプレフィックスになる
KeyType 任意の要素のキーの型
ValueType 任意の要素の値の型
Hasher ハッシュ関数
Compare 要素のキーを比較する関数またはマクロ

注意:
HasherCompare 以外の引数は CSTL_UNORDERED_MAP_INTERFACE() の引数と同じものを指定すること。

KeyType , ValueType を括弧で括らないこと。

覚え書き:
KeyType に構造体型を指定することは、構造体コピーによってパフォーマンスが低下する可能性があるため推奨されない。

#define CSTL_UNORDERED_MULTIMAP_INTERFACE ( Name,
KeyType,
ValueType   ) 

unordered_multimap用インターフェイスマクロ

任意の名前と要素の型のunordered_multimapのインターフェイスを展開する。

使用方法は CSTL_UNORDERED_MAP_INTERFACE()と同じである。

#define CSTL_UNORDERED_MULTIMAP_IMPLEMENT ( Name,
KeyType,
ValueType,
Hasher,
Compare   ) 

unordered_multimap用実装マクロ

CSTL_UNORDERED_MULTIMAP_INTERFACE()で展開したインターフェイスの実装を展開する。

使用方法は CSTL_UNORDERED_MAP_IMPLEMENT()と同じである。

#define CSTL_EQUAL_TO ( x,
 )     ((x) == (y) ? 0 : 1)

整数比較

キーに整数型を指定した場合、 CSTL_UNORDERED_MAP_IMPLEMENT() , CSTL_UNORDERED_MULTIMAP_INTERFACE()Compare 引数に指定する。

引数:
x 1つ目のキー
y 2つ目のキー
戻り値:
0 x == y の場合
非0 x != y の場合


型定義

typedef struct UnorderedMap UnorderedMap

unordered_map/unordered_multimapの型

抽象データ型となっており、内部データメンバは非公開である。

以下、 UnorderedMap_new*() から返されたUnorderedMap構造体へのポインタをunordered_mapオブジェクトという。

typedef PRIVATE_TYPE* UnorderedMapIterator

イテレータ

要素の位置を示す。 イテレータ同士の比較は、 == , != が使用できる。< , > , <= , >= は使用できない。

以下、関数から返されたイテレータを有効なイテレータという。 未初期化のイテレータ、または削除された要素のイテレータ、または値が0のイテレータを無効なイテレータという。

PRIVATE_TYPEは非公開の型である。

typedef PRIVATE_TYPE* UnorderedMapLocalIterator

ローカルイテレータ

一つのバケットの中の要素を巡回するためのイテレータ。 複数のバケットにまたがって巡回することはできない。

PRIVATE_TYPEは非公開の型である。


関数

UnorderedMap* UnorderedMap_new ( void   ) 

生成

要素数が0のunordered_map/unordered_multimapを生成する。

戻り値:
生成に成功した場合、unordered_mapオブジェクトを返す。

メモリ不足の場合、NULLを返す。

UnorderedMap* UnorderedMap_new_rehash ( size_t  n  ) 

バケット数を指定して生成

少なくとも n 個のバケットを確保し、 要素数が0のunordered_map/unordered_multimapを生成する。

引数:
n バケット数
戻り値:
生成に成功した場合、unordered_mapオブジェクトを返す。

メモリ不足の場合、NULLを返す。

void UnorderedMap_delete ( UnorderedMap self  ) 

破棄

self のすべての要素を削除し、self を破棄する。 self がNULLの場合、何もしない。

引数:
self unordered_mapオブジェクト

size_t UnorderedMap_size ( UnorderedMap self  ) 

要素数を取得

引数:
self unordered_mapオブジェクト
戻り値:
self の要素数

int UnorderedMap_empty ( UnorderedMap self  ) 

空チェック

引数:
self unordered_mapオブジェクト
戻り値:
self の要素数が0の場合、非0を返す。

self の要素数が1以上の場合、0を返す。

UnorderedMapIterator UnorderedMap_begin ( UnorderedMap self  ) 

最初の要素のイテレータ

引数:
self unordered_mapオブジェクト
戻り値:
self の最初の要素のイテレータ

UnorderedMapIterator UnorderedMap_end ( UnorderedMap self  ) 

最後の要素の次のイテレータ

引数:
self unordered_mapオブジェクト
戻り値:
self の最後の要素の次のイテレータ

UnorderedMapIterator UnorderedMap_next ( UnorderedMapIterator  pos  ) 

次のイテレータ

引数:
pos イテレータ
戻り値:
pos が示す位置の要素の次のイテレータ
事前条件:
pos が有効なイテレータであること。

posUnorderedMap_end() でないこと。

KeyT const* UnorderedMap_key ( UnorderedMapIterator  pos  ) 

イテレータによる要素のキーのアクセス

引数:
pos イテレータ。pos の型は UnorderedMapLocalIterator でもよい。
戻り値:
pos が示す位置の要素のキーへのポインタ
事前条件:
pos が有効なイテレータであること。

posUnorderedMap_end() または UnorderedMap_bucket_end() でないこと。

覚え書き:
戻り値のポインタの参照先はconstである。

ValueT* UnorderedMap_value ( UnorderedMapIterator  pos  ) 

イテレータによる要素の値のアクセス

引数:
pos イテレータ。pos の型は UnorderedMapLocalIterator でもよい。
戻り値:
pos が示す位置の要素の値へのポインタ
事前条件:
pos が有効なイテレータであること。

posUnorderedMap_end() または UnorderedMap_bucket_end() でないこと。

ValueT* UnorderedMap_at ( UnorderedMap self,
KeyT  key 
)

キーとペアになる値のアクセス(unordered_map専用)

引数:
self unordered_mapオブジェクト
key キー
戻り値:
selfkey というキーの要素の値へのポインタを返す。

selfkey というキーの要素を持っていない場合、key というキーの新しい要素(値は不定)を挿入し、その要素の値へのポインタを返す。

メモリ不足の場合、self の変更を行わずNULLを返す。

注意:
新しい要素を挿入しようとしてメモリ不足で失敗した場合、戻り値のNULLポインタを逆参照しないように注意すること。
覚え書き:
この関数はunordered_mapのみで提供される。

UnorderedMapIterator UnorderedMap_insert ( UnorderedMap self,
KeyT  key,
ValueT  value,
int *  success 
)

要素を挿入(unordered_map専用)

keyvalue のコピーのペアを要素としてself に挿入する。

引数:
self unordered_mapオブジェクト
key 挿入する要素のキー
value 挿入する要素の値
success 成否を格納する変数へのポインタ。ただし、NULLを指定した場合はアクセスしない。
戻り値:
挿入に成功した場合、*success に非0の値を格納し、新しい要素のイテレータを返す。

self が既にkey というキーの要素を持っている場合、挿入を行わず、*success に0を格納し、その要素のイテレータを返す。

メモリ不足の場合、*success に0を格納し、self の変更を行わず0を返す。

覚え書き:
この関数はunordered_mapのみで提供される。

UnorderedMapIterator UnorderedMap_insert_ref ( UnorderedMap self,
KeyT  key,
ValueT const *  value,
int *  success 
)

参照渡しで要素を挿入(unordered_map専用)

key と*value のコピーのペアを要素としてself に挿入する。

引数:
self unordered_mapオブジェクト
key 挿入する要素のキー
value 挿入する要素の値へのポインタ
success 成否を格納する変数へのポインタ。ただし、NULLを指定した場合はアクセスしない。
戻り値:
挿入に成功した場合、*success に非0の値を格納し、新しい要素のイテレータを返す。

self が既にkey というキーの要素を持っている場合、挿入を行わず、*success に0を格納し、その要素のイテレータを返す。

メモリ不足の場合、*success に0を格納し、self の変更を行わず0を返す。

事前条件:
value がNULLでないこと。
覚え書き:
この関数はunordered_mapのみで提供される。

ValueT が構造体型の場合、 UnorderedMap_insert() よりも速い。

UnorderedMapIterator UnorderedMap_insert ( UnorderedMap self,
KeyT  key,
ValueT  value 
)

要素を挿入(unordered_multimap専用)

keyvalue のコピーのペアを要素としてself に挿入する。 self が既にkey というキーの要素を持っている場合、その要素と同じバケットに挿入される。

引数:
self unordered_mapオブジェクト
key 挿入する要素のキー
value 挿入する要素の値
戻り値:
挿入に成功した場合、新しい要素のイテレータを返す。

メモリ不足の場合、self の変更を行わず0を返す。

覚え書き:
この関数はunordered_multimapのみで提供される。

UnorderedMapIterator UnorderedMap_insert_ref ( UnorderedMap self,
KeyT  key,
ValueT const *  value 
)

参照渡しで要素を挿入(unordered_multimap専用)

key と*value のコピーのペアを要素としてself に挿入する。 self が既にkey というキーの要素を持っている場合、その要素と同じバケットに挿入される。

引数:
self unordered_mapオブジェクト
key 挿入する要素のキー
value 挿入する要素の値へのポインタ
戻り値:
挿入に成功した場合、新しい要素のイテレータを返す。

メモリ不足の場合、self の変更を行わず0を返す。

事前条件:
value がNULLでないこと。
覚え書き:
この関数はunordered_multimapのみで提供される。

ValueT が構造体型の場合、 UnorderedMap_insert() よりも速い。

int UnorderedMap_insert_range ( UnorderedMap self,
UnorderedMapIterator  first,
UnorderedMapIterator  last 
)

指定範囲の要素を挿入

[first, last)の範囲の要素のコピーをself に挿入する。 unordered_multimapの場合、[first, last)の要素はself が持つ要素でもよい。

引数:
self unordered_mapオブジェクト
first コピー元の範囲の開始位置
last コピー元の範囲の終了位置
戻り値:
挿入に成功した場合、非0を返す。

メモリ不足の場合、self の変更を行わず0を返す。

事前条件:
[first, last)が有効なイテレータであること。

UnorderedMapIterator UnorderedMap_erase ( UnorderedMap self,
UnorderedMapIterator  pos 
)

要素を削除

selfpos が示す位置の要素を削除する。

引数:
self unordered_mapオブジェクト
pos 削除する要素の位置
戻り値:
削除した要素の次のイテレータ
事前条件:
posself の有効なイテレータであること。

posUnorderedMap_end() でないこと。

UnorderedMapIterator UnorderedMap_erase_range ( UnorderedMap self,
UnorderedMapIterator  first,
UnorderedMapIterator  last 
)

指定範囲の要素を削除

self の[first, last)の範囲の要素を削除する。

引数:
self unordered_mapオブジェクト
first 削除する範囲の開始位置
last 削除する範囲の終了位置
戻り値:
last
事前条件:
[first, last)がself の有効なイテレータであること。

size_t UnorderedMap_erase_key ( UnorderedMap self,
KeyT  key 
)

指定キーの要素を削除

selfkey というキーの要素をすべて削除する。

引数:
self unordered_mapオブジェクト
key 削除する要素のキー
戻り値:
削除した数

void UnorderedMap_clear ( UnorderedMap self  ) 

全要素を削除

self のすべての要素を削除する。

引数:
self unordered_mapオブジェクト

void UnorderedMap_swap ( UnorderedMap self,
UnorderedMap x 
)

交換

selfx の内容を交換する。

引数:
self unordered_mapオブジェクト
x self と内容を交換するunordered_mapオブジェクト

size_t UnorderedMap_count ( UnorderedMap self,
KeyT  key 
)

指定キーの要素をカウント

引数:
self unordered_mapオブジェクト
key カウントする要素のキー
戻り値:
selfkey というキーの要素の数

UnorderedMapIterator UnorderedMap_find ( UnorderedMap self,
KeyT  key 
)

指定キーの要素を検索

selfkey というキーの最初の要素を検索する。

引数:
self unordered_mapオブジェクト
key 検索する要素のキー
戻り値:
見つかった場合、その要素のイテレータを返す。

見つからない場合、 UnorderedMap_end(self) を返す。

void UnorderedMap_equal_range ( UnorderedMap self,
KeyT  key,
UnorderedMapIterator first,
UnorderedMapIterator last 
)

指定キーの要素の範囲を取得

引数:
self unordered_mapオブジェクト
key 検索する要素のキー
first key というキーの最初の要素のイテレータを格納する変数へのポインタ
last key というキーの最後の要素の次のイテレータを格納する変数へのポインタ
事前条件:
first がNULLでないこと。

last がNULLでないこと。

覚え書き:
selfkey というキーの要素を持たない場合、*first , *last ともにUnorderedMap_end(self)が格納される。

size_t UnorderedMap_bucket_count ( UnorderedMap self  ) 

バケット数を取得

引数:
self unordered_mapオブジェクト
戻り値:
self のバケット数

size_t UnorderedMap_bucket_size ( UnorderedMap self,
size_t  idx 
)

一つのバケットの中の要素数を取得

引数:
self unordered_mapオブジェクト
idx バケットのインデックス
戻り値:
idx 番目のバケットの中の要素数
事前条件:
idx が UnorderedMap_bucket_count(self) より小さいこと。

size_t UnorderedMap_bucket ( UnorderedMap self,
KeyT  key 
)

バケットのインデックスを取得

引数:
self unordered_mapオブジェクト
key 要素のキー
戻り値:
key というキーが挿入されるバケットのインデックス

UnorderedMapLocalIterator UnorderedMap_bucket_begin ( UnorderedMap self,
size_t  idx 
)

一つのバケットの中の最初の要素のローカルイテレータ

引数:
self unordered_mapオブジェクト
idx バケットのインデックス
戻り値:
idx 番目のバケットの中の最初の要素のローカルイテレータ
事前条件:
idx が UnorderedMap_bucket_count(self) より小さいこと。

UnorderedMapLocalIterator UnorderedMap_bucket_end ( UnorderedMap self,
size_t  idx 
)

一つのバケットの中の最後の要素の次のローカルイテレータ

引数:
self unordered_mapオブジェクト
idx バケットのインデックス
戻り値:
idx 番目のバケットの中の最後の要素の次のローカルイテレータ
事前条件:
idx が UnorderedMap_bucket_count(self) より小さいこと。

UnorderedMapLocalIterator UnorderedMap_bucket_next ( UnorderedMapLocalIterator  pos  ) 

次のローカルイテレータ

引数:
pos ローカルイテレータ
戻り値:
pos が示す位置の要素の次のローカルイテレータ
事前条件:
pos が有効なローカルイテレータであること。

posUnorderedMap_end() または UnorderedMap_bucket_end() でないこと。

float UnorderedMap_load_factor ( UnorderedMap self  ) 

ロードファクターを取得

バケットの平均要素数(全要素数 / バケット数)をロードファクターと呼ぶ。

引数:
self unordered_mapオブジェクト
戻り値:
self のロードファクター

float UnorderedMap_get_max_load_factor ( UnorderedMap self  ) 

ロードファクターの上限を取得

引数:
self unordered_mapオブジェクト
戻り値:
ロードファクターの上限

void UnorderedMap_set_max_load_factor ( UnorderedMap self,
float  z 
)

ロードファクターの上限を設定

引数:
self unordered_mapオブジェクト
z 設定するロードファクターの上限

int UnorderedMap_rehash ( UnorderedMap self,
size_t  n 
)

バケットを拡張して再ハッシュ

バケット数を 少なくとも n 個に拡張し、全要素をハッシュ関数によって再び振り分ける。

引数:
self unordered_mapオブジェクト
n バケット数
戻り値:
バケットの拡張に成功した場合、非0を返す。

nself の現在のバケット数以下の場合、self の変更を行わず非0を返す。

メモリ不足の場合、self の変更を行わず0を返す。

size_t UnorderedMap_hash_string ( const char *  key  ) 

文字列用ハッシュ関数

CSTL_UNORDERED_MAP_IMPLEMENT() , CSTL_UNORDERED_MULTIMAP_IMPLEMENT() の引数KeyType に const char * を指定した場合、 引数Hasher にこの関数を指定する。

引数:
key キー
戻り値:
ハッシュ値

size_t UnorderedMap_hash_wstring ( const wchar_t *  key  ) 

ワイド文字列用ハッシュ関数

CSTL_UNORDERED_MAP_IMPLEMENT() , CSTL_UNORDERED_MULTIMAP_IMPLEMENT() の引数KeyType に const wchar_t * を指定した場合、 引数Hasher にこの関数を指定する。

引数:
key キー
戻り値:
ハッシュ値

size_t UnorderedMap_hash_char ( char  key  ) 

char用ハッシュ関数

CSTL_UNORDERED_MAP_IMPLEMENT() , CSTL_UNORDERED_MULTIMAP_IMPLEMENT() の引数KeyType に char を指定した場合、 引数Hasher にこの関数を指定する。

引数:
key キー
戻り値:
ハッシュ値

size_t UnorderedMap_hash_schar ( signed char  key  ) 

signed char用ハッシュ関数

CSTL_UNORDERED_MAP_IMPLEMENT() , CSTL_UNORDERED_MULTIMAP_IMPLEMENT() の引数KeyType に signed char を指定した場合、 引数Hasher にこの関数を指定する。

引数:
key キー
戻り値:
ハッシュ値

size_t UnorderedMap_hash_uchar ( unsigned char  key  ) 

unsigned char用ハッシュ関数

CSTL_UNORDERED_MAP_IMPLEMENT() , CSTL_UNORDERED_MULTIMAP_IMPLEMENT() の引数KeyType に unsigned char を指定した場合、 引数Hasher にこの関数を指定する。

引数:
key キー
戻り値:
ハッシュ値

size_t UnorderedMap_hash_short ( short  key  ) 

short用ハッシュ関数

CSTL_UNORDERED_MAP_IMPLEMENT() , CSTL_UNORDERED_MULTIMAP_IMPLEMENT() の引数KeyType に short を指定した場合、 引数Hasher にこの関数を指定する。

引数:
key キー
戻り値:
ハッシュ値

size_t UnorderedMap_hash_ushort ( unsigned short  key  ) 

unsigned short用ハッシュ関数

CSTL_UNORDERED_MAP_IMPLEMENT() , CSTL_UNORDERED_MULTIMAP_IMPLEMENT() の引数KeyType に unsigned short を指定した場合、 引数Hasher にこの関数を指定する。

引数:
key キー
戻り値:
ハッシュ値

size_t UnorderedMap_hash_int ( int  key  ) 

int用ハッシュ関数

CSTL_UNORDERED_MAP_IMPLEMENT() , CSTL_UNORDERED_MULTIMAP_IMPLEMENT() の引数KeyType に int を指定した場合、 引数Hasher にこの関数を指定する。

引数:
key キー
戻り値:
ハッシュ値

size_t UnorderedMap_hash_uint ( unsigned int  key  ) 

unsigned int用ハッシュ関数

CSTL_UNORDERED_MAP_IMPLEMENT() , CSTL_UNORDERED_MULTIMAP_IMPLEMENT() の引数KeyType に unsigned int を指定した場合、 引数Hasher にこの関数を指定する。

引数:
key キー
戻り値:
ハッシュ値

size_t UnorderedMap_hash_long ( long  key  ) 

long用ハッシュ関数

CSTL_UNORDERED_MAP_IMPLEMENT() , CSTL_UNORDERED_MULTIMAP_IMPLEMENT() の引数KeyType に long を指定した場合、 引数Hasher にこの関数を指定する。

引数:
key キー
戻り値:
ハッシュ値

size_t UnorderedMap_hash_ulong ( unsigned long  key  ) 

unsigned long用ハッシュ関数

CSTL_UNORDERED_MAP_IMPLEMENT() , CSTL_UNORDERED_MULTIMAP_IMPLEMENT() の引数KeyType に unsigned long を指定した場合、 引数Hasher にこの関数を指定する。

引数:
key キー
戻り値:
ハッシュ値


SourceForge.JP