マクロ定義 | |
#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 | キー |