名前空間
変種
操作

std::hash <std::optional>

提供: cppreference.com
< cpp‎ | utility‎ | optional
 
 
ユーティリティライブラリ
汎用ユーティリティ
日付と時間
関数オブジェクト
書式化ライブラリ(C++20)
(C++11)
関係演算子 (C++20で非推奨)
整数比較関数
(C++20)
スワップと型操作
(C++14)
(C++11)
(C++11)
(C++11)
(C++17)
一般的な語彙の型
(C++11)
(C++17)
(C++17)
(C++17)
(C++17)

初等文字列変換
(C++17)
(C++17)
 
 
ヘッダ <optional> で定義
template<class T>
struct hash<std::optional<T>>;
(C++17以上)

テンプレート std::hashstd::optional クラスに対する特殊化は、ユーザが optional オブジェクトに格納されている値のハッシュを取ることを可能とします。

特殊化 std::hash<optional<T>> は、 std::hash<std::remove_const_t<T>> が有効化 (std::hash を参照) されていれば有効化され、そうでなければ無効化されます。

有効な場合、値を格納している std::optional<T> 型のオブジェクト o について、 std::hash<std::optional<T>>()(o)std::hash<std::remove_const_t<T>>()(*o) と同じ値に評価されます。 値を格納していない optional については、ハッシュは未規定です。

ベースとなる型のハッシュが例外を投げるかもしれないため、この特殊化のメンバ関数は noexcept であることが保証されていません。

[編集]テンプレート引数

T - optional オブジェクトに格納されている値の型

[編集]

#include <optional>#include <unordered_set>#include <string>#include <iostream>usingnamespace std::literals;int main(){// hash<optional> makes it possible to use unordered_setstd::unordered_set<std::optional<std::string>> s ={"abc"s, std::nullopt, "def"s };   for(constauto& o : s)std::cout<< o.value_or("(null)")<<' ';}

出力例:

def abc (null)

[編集]関連項目

(C++11)
ハッシュ関数オブジェクト
(クラステンプレート)[edit]
close