std::map
を構成できますか?キータイプは参照タイプです。 Foo &
もしそうでなければ、どうしてですか?STLマップのキータイプとして参照タイプを使用できます
答えて
C++標準に従って23.1.2/7 key_type
に割り当てる必要があります。参照型はありません。 std ::マップのキー型として
いいえ、std :: mapの関数の多くはkeytypeへの参照をとり、参照の参照はC++では不正です。
/A.B。
operator[](const key_type & key)
とします。 key_type
がFoo &
の場合、const key_type &
とは何ですか? 問題は機能しないことです。キーの型が参照型の場合は、std :: mapを構築することはできません。
ポインタは
#include <iostream>
#include <cstdlib>
#include <map>
using namespace std;
int main()
{
int a = 2;
int b = 3;
int * c = &a;
int * d = &b;
map<int *, int> M;
M[c]=356;
M[d]=78;
return 0;
}
初期化参照は、キーもカント完全に合法である:
#include <iostream>
#include <cstdlib>
#include <map>
using namespace std;
int main()
{
int a = 2;
int b = 3;
int & c = a;
int & d = b;
map<int &, int> M;
M[c]=356;
M[d]=78;
return 0;
}
In file included from /usr/include/c++/4.4/map:60,
from test.cpp:3:
/usr/include/c++/4.4/bits/stl_tree.h: In instantiation of 'std::_Rb_tree<int&, std::pair<int&, int>, std::_Select1st<std::pair<int&, int> >, std::less<int&>, std::allocator<std::pair<int&, int> > >':
/usr/include/c++/4.4/bits/stl_map.h:128: instantiated from 'std::map<int&, int, std::less<int&>, std::allocator<std::pair<int&, int> > >'
test.cpp:14: instantiated from here
/usr/include/c++/4.4/bits/stl_tree.h:1407: error: forming pointer to reference type 'int&
「
ポインタに基づく順序付けは非決定論的で、プログラムの呼び出しごとに変わる可能性があることに留意してください。 –
キーが等しいかどうか比較されることは言うまでもありません。したがって、ポインタの値を比較するのではなく、ルックアップを行うときにポインタのアドレス値を比較しています。具体的には、この例では、別のint e = 2があり、M [&e]を参照すると、あなたが探していると思われるものが得られません。 – mmocny
- 1. boost :: reference_wrapperを使用してSTLコンテナに参照を格納できますか?
- 2. C++ - テンプレート関数を参照してSTLマップを渡す
- 3. python pandas - 参照として2列を使用したマップ
- 4. TypescriptでEnumを制限付きキータイプとして使用
- 5. C++:マップ内の値として参照を使用することはできますか?
- 6. Json.NETを使用して、参照用のカスタムフォーマットを使用するときに、参照によってオブジェクトを逆シリアル化することはできますか?
- 7. STLマップを使用したデバッグコード
- 8. 'ItemIsLoading'はタイプを参照していますが、ここで値として使用されています
- 9. Perlでtypeglobsを参照として使用できる理由
- 10. constをautoとともに使用するときの参照(またはポインタ)のタイプは何ですか?
- 11. STL:参照または値を格納しますか?
- 12. オペレータがカスタムクラスを使用してC++ STLマップをオーバーロードする
- 13. スイフトで自分のタイプを参照していますか?
- 14. STLマップでstd :: pairの代わりにカスタムクラスを使用できますか?
- 15. C++ STLマップ、キーとしてのstd :: pair
- 16. クラスのイテレータとポインタを使用したSTLマップ
- 17. 同じクラスで使用されているマップ参照クラス
- 18. 参照を使用している参照を使用しているトラバースリンクリスト
- 19. MVVMライトのビューモデルロケータの参照をクラスを使用して参照
- 20. PHP - グローバル参照と参照渡しを使用する
- 21. STLコンテナ内の永続参照
- 22. 抽象クラスを参照型として使用できますか?
- 23. 参照をクラスメンバーとして使用できないのはなぜですか?
- 24. どのように複数のキータイプのstdマップを特化できますか?
- 25. 参照番号は工場からインクリメントされませんか? - Singleton Loggerを使用して参照番号を参照することはできません
- 26. タイプのプロシージャ参照を確認していますか?
- 27. ヌルオブジェクト参照を参照しようとしていますか?
- 28. ポインタを配列として使用して参照を返す
- 29. JNIを使用してJavaコード内のC++オブジェクトを参照できますか?
- 30. 配列を使用してレイヤードキャンバスのコンテキストを参照できますか?
+1が、これは良い質問であります多くは尋ねることを恐れている。 – laura
直接ではありませんが、 'boost :: reference_wrapper'が動作するはずです。 'Foo&'への暗黙的な変換を持っています –
MSalters