namespace std {
template <class InputIterator,
class Hash = hash<typename iterator_traits<InputIterator>::value_type>,
class Pred = equal_to<typename iterator_traits<InputIterator>::value_type>,
class Allocator = allocator<typename iterator_traits<InputIterator>::value_type>>
unordered_multiset(InputIterator, InputIterator, see below::size_type = see below,
Hash = Hash(), Pred = Pred(), Allocator = Allocator())
-> unordered_multiset<typename iterator_traits<InputIterator>::value_type,
Hash, Pred, Allocator>; // (1)
template <class T, class Hash = hash<T>,
class Pred = equal_to<T>, class Allocator = allocator<T>>
unordered_multiset(initializer_list<T>, typename see below::size_type = see below,
Hash = Hash(), Pred = Pred(), Allocator = Allocator())
-> unordered_multiset<T, Hash, Pred, Allocator>; // (2)
template <class InputIterator, class Allocator>
unordered_multiset(InputIterator, InputIterator, typename see below::size_type, Allocator)
-> unordered_multiset<typename iterator_traits<InputIterator>::value_type,
hash<typename iterator_traits<InputIterator>::value_type>,
equal_to<typename iterator_traits<InputIterator>::value_type>,
Allocator>; // (3)
template <class InputIterator, class Hash, class Allocator>
unordered_multiset(InputIterator, InputIterator, typename see below::size_type,
Hash, Allocator)
-> unordered_multiset<
typename iterator_traits<InputIterator>::value_type,
Hash,
equal_to<typename iterator_traits<InputIterator>::value_type>,
Allocator>; // (4)
template <class T, class Allocator>
unordered_multiset(initializer_list<T>, typename see below::size_type, Allocator)
-> unordered_multiset<T, hash<T>,
equal_to<T>, Allocator>; // (5)
template <class T, class Hash, class Allocator>
unordered_multiset(initializer_list<T>, typename see below::size_type, Hash, Allocator)
-> unordered_multiset<T, Hash,
equal_to<T>, Allocator>; // (6)
template <ranges::input_range R,
class Hash = hash<ranges::range_value_t<R>>,
class Pred = equal_to<ranges::range_value_t<R>>,
class Allocator = allocator<ranges::range_value_t<R>>>
unordered_multiset(from_range_t, R&&, typename see below::size_type = see below,
Hash = Hash(), Pred = Pred(), Allocator = Allocator())
-> unordered_multiset<ranges::range_value_t<R>, Hash, Pred, Allocator>; // (7) C++23から
template <ranges::input_range R, class Allocator>
unordered_multiset(from_range_t, R&&, typename see below::size_type, Allocator)
-> unordered_multiset<ranges::range_value_t<R>, hash<ranges::range_value_t<R>>,
equal_to<ranges::range_value_t<R>>, Allocator>; // (8) C++23から
template <ranges::input_range R, class Allocator>
unordered_multiset(from_range_t, R&&, Allocator)
-> unordered_multiset<ranges::range_value_t<R>, hash<ranges::range_value_t<R>>,
equal_to<ranges::range_value_t<R>>, Allocator>; // (9) C++23から
template <ranges::input_range R, class Hash, class Allocator>
unordered_multiset(from_range_t, R&&, typename see below::size_type, Hash, Allocator)
-> unordered_multiset<ranges::range_value_t<R>, Hash,
equal_to<ranges::range_value_t<R>>, Allocator>; // (10) C++23から
}
概要
std::unordered_multiset
クラステンプレートの型推論補助。
- (1) : イテレータ範囲からの推論
- (2) : 初期化子リストからの推論
- (3) : イテレータ範囲とアロケータからの推論
- (4) : イテレータ範囲、ハッシュ関数、アロケータからの推論
- (5) : 初期化子リストとアロケータからの推論
- (6) : 初期化子リスト、ハッシュ関数、アロケータからの推論
- (7) : Rangeからの推論
- (8) : Rangeとアロケータからの推論
- (9) : Rangeとハッシュ関数からの推論
- (10) : Range、ハッシュ関数、アロケータからの推論
備考
- メンバ型
size_type
は自動的に推論される
例
#include <unordered_set>
#include <type_traits>
#include <cassert>
int main()
{
// (2)
// 初期化子リストから推論
std::unordered_multiset ums1 = {1, 2, 3};
static_assert(std::is_same_v<decltype(ums1), std::unordered_multiset<int>>);
// パラメータ設定済みのsetからの推論
std::unordered_multiset ums2 = ums1;
static_assert(std::is_same_v<decltype(ums2), std::unordered_multiset<int>>);
// (1)
// イテレータ範囲からの推論。
// ums3{ums1.begin(), ums1.end()} とすると、イテレータの初期化子リストと見なされてしまうので注意
std::unordered_multiset ums3(ums1.begin(), ums1.end());
static_assert(std::is_same_v<decltype(ums3), std::unordered_multiset<int>>);
assert(ums3.size() == 3);
}
23
#include <unordered_set>
#include <type_traits>
#include <cassert>
int main()
{
// (2)
// 初期化子リストから推論
std::unordered_multiset ums1 = {1, 2, 3};
static_assert(std::is_same_v<decltype(ums1), std::unordered_multiset<int>>);
// パラメータ設定済みのsetからの推論
std::unordered_multiset ums2 = ums1;
static_assert(std::is_same_v<decltype(ums2), std::unordered_multiset<int>>);
// (1)
// イテレータ範囲からの推論。
// ums3{ums1.begin(), ums1.end()} とすると、イテレータの初期化子リストと見なされてしまうので注意
出力
バージョン
言語
- C++17
処理系
- Clang:
- GCC:
- Visual C++: ??