• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:std::mapのメモリアロケータについて)

C++のstd::mapでメモリアロケータを利用する方法について

このQ&Aのポイント
  • VisualStudio2008 Academic EditionでC++のプログラムを書いています。vectorで自作アロケータを利用することはできましたが、mapでの利用方法がわかりません。
  • vectorでは問題なく自作アロケータを利用できるのですが、mapではエラーが発生し、コンパイルできません。
  • mapでのメモリアロケータの利用方法について、教えていただけないでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • sygh
  • ベストアンサー率76% (42/55)
回答No.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)
回答No.1

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を比較してみるとよいでしょう。