unordered_set


マクロ定義

#define CSTL_UNORDERED_SET_INTERFACE(Name, Type)
 unordered_set用インターフェイスマクロ
#define CSTL_UNORDERED_SET_IMPLEMENT(Name, Type, Hasher, Compare)
 unordered_set用実装マクロ
#define CSTL_UNORDERED_MULTISET_INTERFACE(Name, Type)
 unordered_multiset用インターフェイスマクロ
#define CSTL_UNORDERED_MULTISET_IMPLEMENT(Name, Type, Hasher, Compare)
 unordered_multiset用実装マクロ
#define CSTL_EQUAL_TO(x, y)   ((x) == (y) ? 0 : 1)
 整数比較

型定義

typedef struct
UnorderedSet 
UnorderedSet
 unordered_set/unordered_multisetの型
typedef PRIVATE_TYPE * UnorderedSetIterator
 イテレータ
typedef PRIVATE_TYPE * UnorderedSetLocalIterator
 ローカルイテレータ

関数

UnorderedSetUnorderedSet_new (void)
 生成
UnorderedSetUnorderedSet_new_rehash (size_t n)
 バケット数を指定して生成
void UnorderedSet_delete (UnorderedSet *self)
 破棄
size_t UnorderedSet_size (UnorderedSet *self)
 要素数を取得
int UnorderedSet_empty (UnorderedSet *self)
 空チェック
UnorderedSetIterator UnorderedSet_begin (UnorderedSet *self)
 最初の要素のイテレータ
UnorderedSetIterator UnorderedSet_end (UnorderedSet *self)
 最後の要素の次のイテレータ
UnorderedSetIterator UnorderedSet_next (UnorderedSetIterator pos)
 次のイテレータ
T const * UnorderedSet_data (UnorderedSetIterator pos)
 イテレータによる要素のアクセス
UnorderedSetIterator UnorderedSet_insert (UnorderedSet *self, T data, int *success)
 要素を挿入(unordered_set専用)
UnorderedSetIterator UnorderedSet_insert (UnorderedSet *self, T data)
 要素を挿入(unordered_multiset専用)
int UnorderedSet_insert_range (UnorderedSet *self, UnorderedSetIterator first, UnorderedSetIterator last)
 指定範囲の要素を挿入
UnorderedSetIterator UnorderedSet_erase (UnorderedSet *self, UnorderedSetIterator pos)
 要素を削除
UnorderedSetIterator UnorderedSet_erase_range (UnorderedSet *self, UnorderedSetIterator first, UnorderedSetIterator last)
 指定範囲の要素を削除
size_t UnorderedSet_erase_key (UnorderedSet *self, T data)
 指定した値の要素を削除
void UnorderedSet_clear (UnorderedSet *self)
 全要素を削除
void UnorderedSet_swap (UnorderedSet *self, UnorderedSet *x)
 交換
size_t UnorderedSet_count (UnorderedSet *self, T data)
 指定した値の要素をカウント
UnorderedSetIterator UnorderedSet_find (UnorderedSet *self, T data)
 指定した値の要素を検索
void UnorderedSet_equal_range (UnorderedSet *self, T data, UnorderedSetIterator *first, UnorderedSetIterator *last)
 指定した値の要素の範囲を取得
size_t UnorderedSet_bucket_count (UnorderedSet *self)
 バケット数を取得
size_t UnorderedSet_bucket_size (UnorderedSet *self, size_t idx)
 一つのバケットの中の要素数を取得
size_t UnorderedSet_bucket (UnorderedSet *self, T data)
 バケットのインデックスを取得
UnorderedSetLocalIterator UnorderedSet_bucket_begin (UnorderedSet *self, size_t idx)
 一つのバケットの中の最初の要素のローカルイテレータ
UnorderedSetLocalIterator UnorderedSet_bucket_end (UnorderedSet *self, size_t idx)
 一つのバケットの中の最後の要素の次のローカルイテレータ
UnorderedSetLocalIterator UnorderedSet_bucket_next (UnorderedSetLocalIterator pos)
 次のローカルイテレータ
float UnorderedSet_load_factor (UnorderedSet *self)
 ロードファクターを取得
float UnorderedSet_get_max_load_factor (UnorderedSet *self)
 ロードファクターの上限を取得
void UnorderedSet_set_max_load_factor (UnorderedSet *self, float z)
 ロードファクターの上限を設定
int UnorderedSet_rehash (UnorderedSet *self, size_t n)
 バケットを拡張して再ハッシュ
size_t UnorderedSet_hash_string (const char *data)
 文字列用ハッシュ関数
size_t UnorderedSet_hash_wstring (const wchar_t *data)
 ワイド文字列用ハッシュ関数
size_t UnorderedSet_hash_char (char data)
 char用ハッシュ関数
size_t UnorderedSet_hash_schar (signed char data)
 signed char用ハッシュ関数
size_t UnorderedSet_hash_uchar (unsigned char data)
 unsigned char用ハッシュ関数
size_t UnorderedSet_hash_short (short data)
 short用ハッシュ関数
size_t UnorderedSet_hash_ushort (unsigned short data)
 unsigned short用ハッシュ関数
size_t UnorderedSet_hash_int (int data)
 int用ハッシュ関数
size_t UnorderedSet_hash_uint (unsigned int data)
 unsigned int用ハッシュ関数
size_t UnorderedSet_hash_long (long data)
 long用ハッシュ関数
size_t UnorderedSet_hash_ulong (unsigned long data)
 unsigned long用ハッシュ関数

説明

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

unordered_multisetは要素の重複が許されることを除き、unordered_setと同じである。

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

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

#include <cstl/unordered_set.h>

#define CSTL_UNORDERED_SET_INTERFACE(Name, Type)
#define CSTL_UNORDERED_SET_IMPLEMENT(Name, Type, Haser, Compare)

#define CSTL_UNORDERED_MULTISET_INTERFACE(Name, Type)
#define CSTL_UNORDERED_MULTISET_IMPLEMENT(Name, Type, Haser, Compare)

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

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

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

/* unordered_setのインターフェイスと実装を展開 */
CSTL_UNORDERED_SET_INTERFACE(IntUSet, int)
CSTL_UNORDERED_SET_IMPLEMENT(IntUSet, int, IntUSet_hash_int, CSTL_EQUAL_TO)

int main(void)
{
    int i;
    /* イテレータ */
    IntUSetIterator pos;
    /* intのunordered_setを生成。
     * 型名・関数のプレフィックスはIntUSetとなる。 */
    IntUSet *uset = IntUSet_new();

    /* 要素を挿入 */
    for (i = 0; i < 64; i++) {
        IntUSet_insert(uset, i, NULL);
    }
    /* 要素数 */
    printf("size: %d\n", IntUSet_size(uset));
    for (pos = IntUSet_begin(uset); pos != IntUSet_end(uset); 
            pos = IntUSet_next(pos)) {
        /* イテレータによる要素の読み出し(書き換えはできない) */
        printf("%d, ", *IntUSet_data(pos));
    }
    printf("\n");

    /* 3以上の要素を削除 */
    IntUSet_erase_range(uset, IntUSet_find(uset, 3), IntUSet_end(uset));

    for (pos = IntUSet_begin(uset); pos != IntUSet_end(uset); 
            pos = IntUSet_next(pos)) {
        /* イテレータによる要素の読み出し(書き換えはできない) */
        printf("%d, ", *IntUSet_data(pos));
    }
    printf("\n");

    /* 使い終わったら破棄 */
    IntUSet_delete(uset);
    return 0;
}
注意:
以下に説明する型定義・関数は、 CSTL_UNORDERED_SET_INTERFACE(Name, Type) , CSTL_UNORDERED_MULTISET_INTERFACE(Name, Type)NameUnorderedSet , TypeT を仮に指定した場合のものである。 実際に使用する際には、使用例のように適切な引数を指定すること。
覚え書き:
unordered_set専用/unordered_multiset専用と記した関数以外の関数は、unordered_set/unordered_multiset共通の関数である。

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


マクロ定義

#define CSTL_UNORDERED_SET_INTERFACE ( Name,
Type   ) 

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

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

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

Type を括弧で括らないこと。

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

#define CSTL_UNORDERED_SET_IMPLEMENT ( Name,
Type,
Hasher,
Compare   ) 

unordered_set用実装マクロ

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

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

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

Type を括弧で括らないこと。

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

#define CSTL_UNORDERED_MULTISET_INTERFACE ( Name,
Type   ) 

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

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

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

#define CSTL_UNORDERED_MULTISET_IMPLEMENT ( Name,
Type,
Hasher,
Compare   ) 

unordered_multiset用実装マクロ

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

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

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

整数比較

要素の値に整数型を指定した場合、 CSTL_UNORDERED_SET_IMPLEMENT() , CSTL_UNORDERED_MULTISET_INTERFACE()Compare 引数に指定する。

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


型定義

typedef struct UnorderedSet UnorderedSet

unordered_set/unordered_multisetの型

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

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

typedef PRIVATE_TYPE* UnorderedSetIterator

イテレータ

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

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

PRIVATE_TYPEは非公開の型である。

typedef PRIVATE_TYPE* UnorderedSetLocalIterator

ローカルイテレータ

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

PRIVATE_TYPEは非公開の型である。


関数

UnorderedSet* UnorderedSet_new ( void   ) 

生成

要素数が0のunordered_set/unordered_multisetを生成する。

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

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

UnorderedSet* UnorderedSet_new_rehash ( size_t  n  ) 

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

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

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

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

void UnorderedSet_delete ( UnorderedSet self  ) 

破棄

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

引数:
self unordered_setオブジェクト

size_t UnorderedSet_size ( UnorderedSet self  ) 

要素数を取得

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

int UnorderedSet_empty ( UnorderedSet self  ) 

空チェック

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

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

UnorderedSetIterator UnorderedSet_begin ( UnorderedSet self  ) 

最初の要素のイテレータ

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

UnorderedSetIterator UnorderedSet_end ( UnorderedSet self  ) 

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

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

UnorderedSetIterator UnorderedSet_next ( UnorderedSetIterator  pos  ) 

次のイテレータ

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

posUnorderedSet_end() でないこと。

T const* UnorderedSet_data ( UnorderedSetIterator  pos  ) 

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

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

posUnorderedSet_end() または UnorderedSet_bucket_end() でないこと。

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

UnorderedSetIterator UnorderedSet_insert ( UnorderedSet self,
data,
int *  success 
)

要素を挿入(unordered_set専用)

data のコピーをself に挿入する。

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

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

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

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

UnorderedSetIterator UnorderedSet_insert ( UnorderedSet self,
data 
)

要素を挿入(unordered_multiset専用)

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

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

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

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

int UnorderedSet_insert_range ( UnorderedSet self,
UnorderedSetIterator  first,
UnorderedSetIterator  last 
)

指定範囲の要素を挿入

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

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

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

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

UnorderedSetIterator UnorderedSet_erase ( UnorderedSet self,
UnorderedSetIterator  pos 
)

要素を削除

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

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

posUnorderedSet_end() でないこと。

UnorderedSetIterator UnorderedSet_erase_range ( UnorderedSet self,
UnorderedSetIterator  first,
UnorderedSetIterator  last 
)

指定範囲の要素を削除

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

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

size_t UnorderedSet_erase_key ( UnorderedSet self,
data 
)

指定した値の要素を削除

selfdata という値の要素をすべて削除する。

引数:
self unordered_setオブジェクト
data 削除する要素の値
戻り値:
削除した数

void UnorderedSet_clear ( UnorderedSet self  ) 

全要素を削除

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

引数:
self unordered_setオブジェクト

void UnorderedSet_swap ( UnorderedSet self,
UnorderedSet x 
)

交換

selfx の内容を交換する。

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

size_t UnorderedSet_count ( UnorderedSet self,
data 
)

指定した値の要素をカウント

引数:
self unordered_setオブジェクト
data カウントする要素の値
戻り値:
selfdata という値の要素の数

UnorderedSetIterator UnorderedSet_find ( UnorderedSet self,
data 
)

指定した値の要素を検索

selfdata という値の最初の要素を検索する。

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

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

void UnorderedSet_equal_range ( UnorderedSet self,
data,
UnorderedSetIterator first,
UnorderedSetIterator last 
)

指定した値の要素の範囲を取得

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

last がNULLでないこと。

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

size_t UnorderedSet_bucket_count ( UnorderedSet self  ) 

バケット数を取得

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

size_t UnorderedSet_bucket_size ( UnorderedSet self,
size_t  idx 
)

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

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

size_t UnorderedSet_bucket ( UnorderedSet self,
data 
)

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

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

UnorderedSetLocalIterator UnorderedSet_bucket_begin ( UnorderedSet self,
size_t  idx 
)

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

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

UnorderedSetLocalIterator UnorderedSet_bucket_end ( UnorderedSet self,
size_t  idx 
)

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

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

UnorderedSetLocalIterator UnorderedSet_bucket_next ( UnorderedSetLocalIterator  pos  ) 

次のローカルイテレータ

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

posUnorderedSet_end() または UnorderedSet_bucket_end() でないこと。

float UnorderedSet_load_factor ( UnorderedSet self  ) 

ロードファクターを取得

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

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

float UnorderedSet_get_max_load_factor ( UnorderedSet self  ) 

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

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

void UnorderedSet_set_max_load_factor ( UnorderedSet self,
float  z 
)

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

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

int UnorderedSet_rehash ( UnorderedSet self,
size_t  n 
)

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

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

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

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

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

size_t UnorderedSet_hash_string ( const char *  data  ) 

文字列用ハッシュ関数

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

引数:
data 要素の値
戻り値:
ハッシュ値

size_t UnorderedSet_hash_wstring ( const wchar_t *  data  ) 

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

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

引数:
data 要素の値
戻り値:
ハッシュ値

size_t UnorderedSet_hash_char ( char  data  ) 

char用ハッシュ関数

CSTL_UNORDERED_SET_IMPLEMENT() , CSTL_UNORDERED_MULTISET_IMPLEMENT() の引数Type に char を指定した場合、 引数Hasher にこの関数を指定する。

引数:
data 要素の値
戻り値:
ハッシュ値

size_t UnorderedSet_hash_schar ( signed char  data  ) 

signed char用ハッシュ関数

CSTL_UNORDERED_SET_IMPLEMENT() , CSTL_UNORDERED_MULTISET_IMPLEMENT() の引数Type に signed char を指定した場合、 引数Hasher にこの関数を指定する。

引数:
data 要素の値
戻り値:
ハッシュ値

size_t UnorderedSet_hash_uchar ( unsigned char  data  ) 

unsigned char用ハッシュ関数

CSTL_UNORDERED_SET_IMPLEMENT() , CSTL_UNORDERED_MULTISET_IMPLEMENT() の引数Type に unsigned char を指定した場合、 引数Hasher にこの関数を指定する。

引数:
data 要素の値
戻り値:
ハッシュ値

size_t UnorderedSet_hash_short ( short  data  ) 

short用ハッシュ関数

CSTL_UNORDERED_SET_IMPLEMENT() , CSTL_UNORDERED_MULTISET_IMPLEMENT() の引数Type に short を指定した場合、 引数Hasher にこの関数を指定する。

引数:
data 要素の値
戻り値:
ハッシュ値

size_t UnorderedSet_hash_ushort ( unsigned short  data  ) 

unsigned short用ハッシュ関数

CSTL_UNORDERED_SET_IMPLEMENT() , CSTL_UNORDERED_MULTISET_IMPLEMENT() の引数Type に unsigned short を指定した場合、 引数Hasher にこの関数を指定する。

引数:
data 要素の値
戻り値:
ハッシュ値

size_t UnorderedSet_hash_int ( int  data  ) 

int用ハッシュ関数

CSTL_UNORDERED_SET_IMPLEMENT() , CSTL_UNORDERED_MULTISET_IMPLEMENT() の引数Type に int を指定した場合、 引数Hasher にこの関数を指定する。

引数:
data 要素の値
戻り値:
ハッシュ値

size_t UnorderedSet_hash_uint ( unsigned int  data  ) 

unsigned int用ハッシュ関数

CSTL_UNORDERED_SET_IMPLEMENT() , CSTL_UNORDERED_MULTISET_IMPLEMENT() の引数Type に unsigned int を指定した場合、 引数Hasher にこの関数を指定する。

引数:
data 要素の値
戻り値:
ハッシュ値

size_t UnorderedSet_hash_long ( long  data  ) 

long用ハッシュ関数

CSTL_UNORDERED_SET_IMPLEMENT() , CSTL_UNORDERED_MULTISET_IMPLEMENT() の引数Type に long を指定した場合、 引数Hasher にこの関数を指定する。

引数:
data 要素の値
戻り値:
ハッシュ値

size_t UnorderedSet_hash_ulong ( unsigned long  data  ) 

unsigned long用ハッシュ関数

CSTL_UNORDERED_SET_IMPLEMENT() , CSTL_UNORDERED_MULTISET_IMPLEMENT() の引数Type に unsigned long を指定した場合、 引数Hasher にこの関数を指定する。

引数:
data 要素の値
戻り値:
ハッシュ値


SourceForge.JP