GeezerVison is showing cpprefjp.github.io — std::unordered_set::get_allocator - cpprefjp C++日本語リファレンス
最終更新日時:
2026年09月11日 13時06分31秒 (JST)
Akira Takahashi
が更新
履歴
編集
function
<unordered_set>
std:: unordered_set:: get_allocator (C++11)
allocator_type get_allocator () const noexcept ; // (1) C++11
constexpr allocator_type get_allocator () const noexcept ; // (1) C++26
概要
このコンテナで使用されているアロケータオブジェクトを取得する。
戻り値
このコンテナで使用されているアロケータオブジェクト
例外
投げない
計算量
定数
例
#include <iostream>
#include <memory>
#include <unordered_set>
#include <type_traits>
template < class T >
struct my_alloc {
using value_type = T ;
T * allocate ( std::size_t n ) { return static_cast < T *> ( ::operator new ( sizeof ( T ) * n )); }
void deallocate ( T * p , std::size_t ) noexcept { ::operator delete ( static_cast < void *> ( p )); }
template < class U >
my_alloc ( const my_alloc < U >& b ) noexcept : no ( b . no ) { }
explicit my_alloc ( const int _no ) : no ( _no ) { }
int no ;
using propagate_on_container_swap = std::true_type ;
};
template < class T1 , class T2 >
bool operator == ( const my_alloc < T1 >& a1 , const my_alloc < T2 >& a2 ) noexcept
{
return a1 . no == a2 . no ;
}
template < class T1 , class T2 >
bool operator != ( const my_alloc < T1 >& a1 , const my_alloc < T2 >& a2 ) noexcept
{
return a1 . no != a2 . no ;
}
template < class Key >
using myuset = std::unordered_set < Key , std::hash < Key > , std::equal_to < Key > , my_alloc < Key >> ;
int main ()
{
myuset < int > us1 { my_alloc < int > ( 1 ) };
myuset < int > us2 { my_alloc < int > ( 2 ) };
std::cout << us1 . get_allocator() . no << ',' << us2 . get_allocator() . no << std::endl ;
swap ( us1 , us2 );
// my_alloc は propagate_on_container_swap を true_type としているので、
// アロケータも swap される。
std::cout << us1 . get_allocator() . no << ',' << us2 . get_allocator() . no << std::endl ;
us1 = us2 ;
// my_alloc は propagate_on_container_copy_assignment を true_type としていないので、
// アロケータは copy されない。
std::cout << us1 . get_allocator() . no << ',' << us2 . get_allocator() . no << std::endl ;
}
出力
1,2
2,1
2,1
バージョン
言語
処理系
Clang : 3.0 ✅ , 3.1 ✅
GCC : 4.4.7 ✅ , 4.5.3 ✅ , 4.6.3 ✅ , 4.7.0 ✅
Visual C++ : 2010 ✅ , 2012 ✅ , 2013 ✅ , 2015 ✅ , 2017 ✅
2010は、noexceptが修飾されていない。
2012, 2013は、noexceptが実装されていないため、throw()が修飾されている。
備考
libstdc++ の unordered_set では、アロケータの select_on_container_copy_construction、propagate_on_container_copy_assignment、propagate_on_container_move_assignment、および、propagate_on_container_swap を正しく扱っていないため、get_allocator で返されるアロケータオブジェクトは予期せぬものになる可能性がある。
関連項目
参照