2016-06-30 16 views
-2
typedef struct 
{ 
int m_x[5]; 
int m_y[5]; 
} my_struct; 

タイプmy_structのマップオブジェクトを作成します。構造体の配列型のマップオブジェクトを作成する方法

std::map<int, my_struct> map_object; 

forループでは、値を自分の構造体のメンバに初期化します。どうすればいいですか?これを関数で行い、map_objectを返すにはどうすれば返されますか?

+0

オフトピック: 'typedef構造体{blah blah blah} my_struct;' 'typedef'はC++では不要なノイズです。 'struct my_struct {blah blah blah};'は、これ以上努力することなく 'my_struct'として使うことができます。この構文は少し赤い旗です。多くの場合、作者はC++プログラミングではなくCプログラミングを知っていることを意味し、他のいくつかの提案を再度確認する必要があるかもしれません。 – user4581301

+0

トピックでは、コンパイル時に地図の初期化値がわかっていますか? – user4581301

+0

@ user4581301:いいえ –

答えて

0

はこの試してみてください。

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]; 
}; 
+0

もし私が値を保持する配列でmap_object構造体メンバを初期化したいのであれば、どうしたらいいですか?と私はどのように元メンバーの構造体にアクセスすることができます。 m_x [3]? –

+0

@VinayBalajiRajputhは、struct_to_intializeポインターを使用して、マップ内の各structメンバーに順次アクセスします。 –

+0

'my_struct * struct_to_intialize = * it;'は決してコンパイルされません。 – NathanOliver

1

次の例では、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; 
} 
関連する問題