こんにちは。
質問させてください。
現在VisualStudio2008 Academic EditionでC++のプログラムを書いています。
vectorで使用可能なアロケータを作ったのですが、mapでそのアロケータを利用する方法がわかりません。
// vectorで自作アロケータを利用
std::vector< char, my_allocator<char> > myVec;
// mapで自作アロケータを利用
std::map< int, float, std::less< int >, my_allocator< std::pair< int, float > > > myMap;
vectorの場合はコンパイルできるのですがmapの場合は
error C2664: 'my_allocator<_type>::allocator(const my_allocator<_type> &)' : 1 番目の引数を 'my_allocator<_type>' から 'const my_allocator<_type> &' に変換できません。
というエラーが出てコンパイルできません。
ご教授願います。
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 …
http://monsho.blog63.fc2.com/blog-entry-93.html
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を比較してみるとよいでしょう。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# このプログラミング誰か教えてください 9 2022/04/22 18:50
- C言語・C++・C# このプログラミング誰か教えてくれませんか 3 2022/05/13 17:27
- C言語・C++・C# このプログラミング誰か教えてくれませんか 2 2022/05/14 09:45
- C言語・C++・C# C++プログラミングコードにポリモーフィズムを取り入れ方を教えてください。 2 2023/06/09 11:17
- C言語・C++・C# このプログラミング誰か教えてください。 2 2022/04/22 18:48
- その他(プログラミング・Web制作) このプログラミング誰か教えてくれませんか 4 2022/04/29 15:56
- C言語・C++・C# C++のcinの動作 5 2023/02/26 00:13
- その他(プログラミング・Web制作) pythonのmap、結果の利用は1度だけ? 5 2022/06/11 12:33
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
- C言語・C++・C# メインプログラムに#include <algorithm>を書いて、 そのメインプログラムが // 3 2023/05/02 11:24
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
空ENTERの判別
-
enumの値から定義名を文字列化...
-
switch文のエラーについて
-
ハミング符号の解読について
-
_CRT_SECURE_NO_DEPRECATE が効...
-
C言語のポインターで詰まっている
-
unsigned char SJis[2]からstd:...
-
#include "fstream.h"
-
snprintfが使用できない。
-
CStringとString
-
C++で、テキストファイルを一行...
-
指定した文字を削除したい
-
mapの初期化
-
std::mapのメモリアロケータに...
-
C++でShowCursorを使いたい。
-
独立係数について教えて下さい。
-
Enterキーを押されたら次の処理...
-
信頼区間の1.96や1.65ってどこ...
-
2÷3などの余りについて
-
マイナスからプラスへ転じた時...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
switch文のエラーについて
-
構文エラーが出ているのですが...
-
VC++で文字列から任意の文字を...
-
enumの値から定義名を文字列化...
-
空ENTERの判別
-
C++でShowCursorを使いたい。
-
なぜ、C++の標準ヘッダをインク...
-
#define中の#のエスケープ
-
C++で、テキストファイルを一行...
-
gccでコンパイル時のエラー
-
C言語のエラーを修正したい
-
#include "fstream.h"
-
C言語のポインターで詰まっている
-
リモートデスクトップの接続元I...
-
構造体配列のvectorへの変換と...
-
JPEGやPNGが読めるLoadImage関数
-
VS2019でofstreamが未定義になる
-
構造体に決められた文字列を入...
-
VHDLのsignedとunsignedの違いは?
-
std::wstringのメモリリークに...
おすすめ情報