マクロ定義 | |
| #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 |
| ローカルイテレータ | |
関数 | |
| UnorderedMap * | UnorderedMap_new (void) |
| 生成 | |
| UnorderedMap * | UnorderedMap_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_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; }
コンパイラオプションによって、NDEBUGマクロが未定義かつCSTL_DEBUGマクロが定義されているならば、 assertマクロが有効になり、関数の事前条件に違反するとプログラムの実行を停止する。
| #define CSTL_UNORDERED_MAP_INTERFACE | ( | Name, | |||
| KeyType, | |||||
| ValueType | ) |
unordered_map用インターフェイスマクロ
任意の名前と要素の型のunordered_mapのインターフェイスを展開する。
| Name | 既存の型と重複しない任意の名前。unordered_mapの型名と関数のプレフィックスになる | |
| KeyType | 任意の要素のキーの型 | |
| ValueType | 任意の要素の値の型 |
KeyType , ValueType を括弧で括らないこと。
| #define CSTL_UNORDERED_MAP_IMPLEMENT | ( | Name, | |||
| KeyType, | |||||
| ValueType, | |||||
| Hasher, | |||||
| Compare | ) |
unordered_map用実装マクロ
CSTL_UNORDERED_MAP_INTERFACE()で展開したインターフェイスの実装を展開する。
| Name | 既存の型と重複しない任意の名前。unordered_mapの型名と関数のプレフィックスになる | |
| KeyType | 任意の要素のキーの型 | |
| ValueType | 任意の要素の値の型 | |
| Hasher | ハッシュ関数 | |
| Compare | 要素のキーを比較する関数またはマクロ |
int comp(KeyType x, KeyType y);
size_t hash(KeyType x);
KeyType , ValueType を括弧で括らないこと。
| #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, | |||
| y | ) | ((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を生成する。
メモリ不足の場合、NULLを返す。
| UnorderedMap* UnorderedMap_new_rehash | ( | size_t | n | ) |
バケット数を指定して生成
少なくとも n 個のバケットを確保し、 要素数が0のunordered_map/unordered_multimapを生成する。
| n | バケット数 |
メモリ不足の場合、NULLを返す。
| void UnorderedMap_delete | ( | UnorderedMap * | self | ) |
破棄
self のすべての要素を削除し、self を破棄する。 self がNULLの場合、何もしない。
| self | unordered_mapオブジェクト |
| size_t UnorderedMap_size | ( | UnorderedMap * | self | ) |
要素数を取得
| self | unordered_mapオブジェクト |
| int UnorderedMap_empty | ( | UnorderedMap * | self | ) |
空チェック
| self | unordered_mapオブジェクト |
self の要素数が1以上の場合、0を返す。
| UnorderedMapIterator UnorderedMap_begin | ( | UnorderedMap * | self | ) |
最初の要素のイテレータ
| self | unordered_mapオブジェクト |
| UnorderedMapIterator UnorderedMap_end | ( | UnorderedMap * | self | ) |
最後の要素の次のイテレータ
| self | unordered_mapオブジェクト |
| UnorderedMapIterator UnorderedMap_next | ( | UnorderedMapIterator | pos | ) |
次のイテレータ
| pos | イテレータ |
pos が UnorderedMap_end() でないこと。
| KeyT const* UnorderedMap_key | ( | UnorderedMapIterator | pos | ) |
イテレータによる要素のキーのアクセス
| pos | イテレータ。pos の型は UnorderedMapLocalIterator でもよい。 |
pos が UnorderedMap_end() または UnorderedMap_bucket_end() でないこと。
| ValueT* UnorderedMap_value | ( | UnorderedMapIterator | pos | ) |
イテレータによる要素の値のアクセス
| pos | イテレータ。pos の型は UnorderedMapLocalIterator でもよい。 |
pos が UnorderedMap_end() または UnorderedMap_bucket_end() でないこと。
| ValueT* UnorderedMap_at | ( | UnorderedMap * | self, | |
| KeyT | key | |||
| ) |
キーとペアになる値のアクセス(unordered_map専用)
| self | unordered_mapオブジェクト | |
| key | キー |
self がkey というキーの要素を持っていない場合、key というキーの新しい要素(値は不定)を挿入し、その要素の値へのポインタを返す。
メモリ不足の場合、self の変更を行わずNULLを返す。
| UnorderedMapIterator UnorderedMap_insert | ( | UnorderedMap * | self, | |
| KeyT | key, | |||
| ValueT | value, | |||
| int * | success | |||
| ) |
要素を挿入(unordered_map専用)
key とvalue のコピーのペアを要素としてself に挿入する。
| self | unordered_mapオブジェクト | |
| key | 挿入する要素のキー | |
| value | 挿入する要素の値 | |
| success | 成否を格納する変数へのポインタ。ただし、NULLを指定した場合はアクセスしない。 |
self が既にkey というキーの要素を持っている場合、挿入を行わず、*success に0を格納し、その要素のイテレータを返す。
メモリ不足の場合、*success に0を格納し、self の変更を行わず0を返す。
| 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を指定した場合はアクセスしない。 |
self が既にkey というキーの要素を持っている場合、挿入を行わず、*success に0を格納し、その要素のイテレータを返す。
メモリ不足の場合、*success に0を格納し、self の変更を行わず0を返す。
ValueT が構造体型の場合、 UnorderedMap_insert() よりも速い。
| UnorderedMapIterator UnorderedMap_insert | ( | UnorderedMap * | self, | |
| KeyT | key, | |||
| ValueT | value | |||
| ) |
要素を挿入(unordered_multimap専用)
key とvalue のコピーのペアを要素としてself に挿入する。 self が既にkey というキーの要素を持っている場合、その要素と同じバケットに挿入される。
| self | unordered_mapオブジェクト | |
| key | 挿入する要素のキー | |
| value | 挿入する要素の値 |
メモリ不足の場合、self の変更を行わず0を返す。
| 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を返す。
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 | コピー元の範囲の終了位置 |
メモリ不足の場合、self の変更を行わず0を返す。
| UnorderedMapIterator UnorderedMap_erase | ( | UnorderedMap * | self, | |
| UnorderedMapIterator | pos | |||
| ) |
要素を削除
self のpos が示す位置の要素を削除する。
| self | unordered_mapオブジェクト | |
| pos | 削除する要素の位置 |
pos が UnorderedMap_end() でないこと。
| UnorderedMapIterator UnorderedMap_erase_range | ( | UnorderedMap * | self, | |
| UnorderedMapIterator | first, | |||
| UnorderedMapIterator | last | |||
| ) |
指定範囲の要素を削除
self の[first, last)の範囲の要素を削除する。
| self | unordered_mapオブジェクト | |
| first | 削除する範囲の開始位置 | |
| last | 削除する範囲の終了位置 |
| size_t UnorderedMap_erase_key | ( | UnorderedMap * | self, | |
| KeyT | key | |||
| ) |
指定キーの要素を削除
self のkey というキーの要素をすべて削除する。
| self | unordered_mapオブジェクト | |
| key | 削除する要素のキー |
| void UnorderedMap_clear | ( | UnorderedMap * | self | ) |
全要素を削除
self のすべての要素を削除する。
| self | unordered_mapオブジェクト |
| void UnorderedMap_swap | ( | UnorderedMap * | self, | |
| UnorderedMap * | x | |||
| ) |
交換
self とx の内容を交換する。
| self | unordered_mapオブジェクト | |
| x | self と内容を交換するunordered_mapオブジェクト |
| size_t UnorderedMap_count | ( | UnorderedMap * | self, | |
| KeyT | key | |||
| ) |
指定キーの要素をカウント
| self | unordered_mapオブジェクト | |
| key | カウントする要素のキー |
| UnorderedMapIterator UnorderedMap_find | ( | UnorderedMap * | self, | |
| KeyT | key | |||
| ) |
指定キーの要素を検索
self のkey というキーの最初の要素を検索する。
| 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 というキーの最後の要素の次のイテレータを格納する変数へのポインタ |
last がNULLでないこと。
| size_t UnorderedMap_bucket_count | ( | UnorderedMap * | self | ) |
バケット数を取得
| self | unordered_mapオブジェクト |
| size_t UnorderedMap_bucket_size | ( | UnorderedMap * | self, | |
| size_t | idx | |||
| ) |
一つのバケットの中の要素数を取得
| self | unordered_mapオブジェクト | |
| idx | バケットのインデックス |
| size_t UnorderedMap_bucket | ( | UnorderedMap * | self, | |
| KeyT | key | |||
| ) |
バケットのインデックスを取得
| self | unordered_mapオブジェクト | |
| key | 要素のキー |
| UnorderedMapLocalIterator UnorderedMap_bucket_begin | ( | UnorderedMap * | self, | |
| size_t | idx | |||
| ) |
一つのバケットの中の最初の要素のローカルイテレータ
| self | unordered_mapオブジェクト | |
| idx | バケットのインデックス |
| UnorderedMapLocalIterator UnorderedMap_bucket_end | ( | UnorderedMap * | self, | |
| size_t | idx | |||
| ) |
一つのバケットの中の最後の要素の次のローカルイテレータ
| self | unordered_mapオブジェクト | |
| idx | バケットのインデックス |
| UnorderedMapLocalIterator UnorderedMap_bucket_next | ( | UnorderedMapLocalIterator | pos | ) |
次のローカルイテレータ
| pos | ローカルイテレータ |
pos が UnorderedMap_end() または UnorderedMap_bucket_end() でないこと。
| float UnorderedMap_load_factor | ( | UnorderedMap * | self | ) |
ロードファクターを取得
バケットの平均要素数(全要素数 / バケット数)をロードファクターと呼ぶ。
| self | unordered_mapオブジェクト |
| 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 | バケット数 |
n がself の現在のバケット数以下の場合、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 | キー |