typedef struct
{
int m_x[5];
int m_y[5];
} my_struct;
タイプmy_structのマップオブジェクトを作成します。構造体の配列型のマップオブジェクトを作成する方法
std::map<int, my_struct> map_object;
forループでは、値を自分の構造体のメンバに初期化します。どうすればいいですか?これを関数で行い、map_objectを返すにはどうすれば返されますか?
typedef struct
{
int m_x[5];
int m_y[5];
} my_struct;
タイプmy_structのマップオブジェクトを作成します。構造体の配列型のマップオブジェクトを作成する方法
std::map<int, my_struct> map_object;
forループでは、値を自分の構造体のメンバに初期化します。どうすればいいですか?これを関数で行い、map_objectを返すにはどうすれば返されますか?
はこの試してみてください。
std::map<int, my_struct>::iterator it = map_object.begin();
while (it != map_object.end()){
my_struct& struct_to_intialize = it->second;
//do things with struct_to_initialize
it++;
}
をしかし、あなたはあなたの構造体のコンストラクタを含める場合代わりに、のような:
my_struct::my_struct(){
//initialize as you please
}
その後、すべてが暗黙的に行うことができます。
注:typedefのは、C++で必要とされない
struct my_struct {
int m_x[5];
int m_y[5];
};
もし私が値を保持する配列でmap_object構造体メンバを初期化したいのであれば、どうしたらいいですか?と私はどのように元メンバーの構造体にアクセスすることができます。 m_x [3]? –
@VinayBalajiRajputhは、struct_to_intializeポインターを使用して、マップ内の各structメンバーに順次アクセスします。 –
'my_struct * struct_to_intialize = * it;'は決してコンパイルされません。 – NathanOliver
次の例では、forループでは、あなたの構造体を使用してマップを埋める方法を示して、あなたはあなたの構造体を宣言する必要があります。また、structメンバーにアクセスする方法も示しています。機能を持つように
#include <array>
#include <map>
#include <iostream>
struct my_struct
{
std::array<int, 5> m_x;
std::array<int, 5> m_y;
my_struct(std::array<int, 5> x, std::array<int, 5> y) : m_x(x), m_y(y)
{}
};
int main()
{
std::map<int, my_struct> myMap;
// Adding elements to the map using a for loop
for (int i = 0; i < 3; ++i)
{
std::array<int, 5> x = { i,i,i,i,i };
std::array<int, 5> y = { 0,0,0,i,i };
myMap.insert(std::pair<int, my_struct>(i, my_struct(x,y)));
}
// accessing m_x
std::cout << "Member with key 1 has m_x[0] value of: "
<< myMap.at(1).m_x[0] << std::endl;
}
は、あなたは、単に現代のCのようなマップを返しマップを返す++コンパイラは深いコピーの必要性を削除する必要があります。
std::map<int, my_struct> getAMap()
{
std::map<int, my_struct> myMap;
// Adding elements to the map using a for loop
for (int i = 0; i < 3; ++i)
// ...
return myMap;
}
int main()
{
auto myMap = getAMap();
// accessing m_x
std::cout << "Member with key 1 has m_x[0] value of: "
<< myMap.at(1).m_x[0] << std::endl;
}
オフトピック: 'typedef構造体{blah blah blah} my_struct;' 'typedef'はC++では不要なノイズです。 'struct my_struct {blah blah blah};'は、これ以上努力することなく 'my_struct'として使うことができます。この構文は少し赤い旗です。多くの場合、作者はC++プログラミングではなくCプログラミングを知っていることを意味し、他のいくつかの提案を再度確認する必要があるかもしれません。 – user4581301
トピックでは、コンパイル時に地図の初期化値がわかっていますか? – user4581301
@ user4581301:いいえ –