- ベストアンサー
C++のstd::mapでメモリアロケータを利用する方法について
- VisualStudio2008 Academic EditionでC++のプログラムを書いています。vectorで自作アロケータを利用することはできましたが、mapでの利用方法がわかりません。
- vectorでは問題なく自作アロケータを利用できるのですが、mapではエラーが発生し、コンパイルできません。
- mapでのメモリアロケータの利用方法について、教えていただけないでしょうか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
std::map が value_type のための rebind 定義を別途要求するせいだと思われます。 下記のコンストラクタは定義していますか? my_allocator() throw(){} my_allocator(const my_allocater<_Ty>&) throw(){} template <class _Other> my_allocator(const allocator<_Other>&) throw(){} value_type に key_type と同様のカスタム アロケート処理を行なう場合、空の定義でかまわないようです。 参考までに。 http://www.geocities.jp/ky_webid/cpp/library/028.html http://monsho.blog63.fc2.com/blog-entry-93.html
その他の回答 (1)
- sha-girl
- ベストアンサー率52% (430/816)
std::map< int, float, std::less< int >, my_allocator< std::pair< const int, float > > > myMap; ではないでしょうか? ちなみに私の環境はVS2005ですが std::map< int, float, std::less< int >, my_allocator< std::allocator< int, float > > > myMap; でコンパイルが通りますが2008だと型に厳しくなっているのかもしれません。 もし、std::map< int, float, std::less< int >, std::allocator< std::pair< const int, float > > > myMap; でコンパイルが通るならアロケータの実装に問題があるように思います。 ソースはついていると思うのでstd::allocatorのソースとmy_allocatorを比較してみるとよいでしょう。