なstd::地図<key, data=""> C++支援ネイティブデータ型のような構造?
-
26-09-2019 - |
質問
どんな地図をキーネイティブデータ型のような構造ですか?
わたしは、このsnippedからなかったコンパイルします。いと思います。にどこを直せばいいの?
#include <map>
#include <iostream>
typedef struct _list
{
int a,b;
}list;
map<int,list> test_map;
int main(void)
{
cout <<"Testing"<< endl;
}
解決
問題はこちら
だから
using::std
またはstd::map
, ので、コンパイラなどのmap<int,list>
します。と仮定してい
using namespace std
宣言は、typedeflist
がぶつかのSTL収集したものです。変化するためのものでした。ご
typedef struct _tag {...} tag;
構は古風なホールドオーバーから80です。なnecesarry、正直でからどうするかは考えものだ。で取得します。
こちらのコードを修正
#include <map>
#include <iostream>
struct MyList
{
int a,b;
};
std::map<int,MyList> test_map;
int main(void)
{
std::cout <<"Testing"<< std::endl;
return 0;
}
他のヒント
のstdのマップが存在する::名前空間。この問題を解決するには2つの方法:
using namespace std;
// ...
map<int, list> test_map;
または
std::map<int, list> test_map;
私は第二の方法を好むが、それは純粋に個人的な選択です。
関連ノートで、あなたは彼らがでなければならないという事実は別に、マップに入れることができるものには本当の制限はありませんコピー可能/アサイナブル、およびキータイプが<演算子を持たなければならないこと(あるいはあなたも提供することができます比較演算ファンクタ)。
EDIT:<list>
は<iostream>
で(そう)または<map>
(変なしかし、不可能ではない)のいずれかどこかを、含まれているように思えます。使用して名前空間stdは、独自の構造体と衝突するのstd ::リストの原因となります。解決策:あなたの構造体の名前を変更、または使用して名前空間とプットのstd ::それが必要なの削除
必要が追加されましたstd
。
mylist
にリネームリストはstd::list
との衝突を避けるために。避け型名および一般的な使用法と衝突する変数名。
今VS2008でOKをコンパイルします。
#include <map>
#include <iostream>
typedef struct _list
{
int a,b;
} mylist;
std::map<int,mylist> test_map;
int main(void)
{
std::cout <<"Testing"<< std::endl;
return 0;
}
STLコンテナであなたの構造体を使用して何の問題もありませんが、それはコピー可能きれい(コピーコンストラクタ)、割り当て可能(実装しoperator=
)と同等の(実装のoperator<
)です提供ます。
map<int, _list> test_map;
または構造の名前として、(より良い)list
を使用しないでください。 (おそらくも持っている。
#include <list>
...
using namespace std;
あなたのコード内のどこかでます。
いしないようにして使用codepad。
そして、カテコードするという
- では暗黙的に(不要)
using namespace std
--を必要としない該map
,cout
またはendl
. - では(おそらく)を含む標準ヘッダにあるたいむ
#include <list>
.
その際のコンパイラのコードで見つ list
, お版のもの std
.での使用指令、両方とも範囲のラインを作成しますの地図やコンパイラがないを決定することができる。
簡単なことをすることができ:変更のタイプの簡単なテスト以外のもの list
(痛!ツールの強制力は名前を選択!) または完全に適用:
#include <map>
struct list {
int a,b;
};
std::map< int, ::list > the_map;
// ...
ご注意 codepad での追加などによるものを使用指令でもコンパイル:
struct list {
int a,b;
};
map<int,::list> the_map;
そのコードが 間違った
あなたはこれを試してみてくださいC.から来ているように見えます
#include <map>
#include <iostream>
struct list
{
int a,b;
};
std::map<int,list> test_map;
int main(void)
{
std::cout <<"Testing"<< std::endl;
return 0;
}