2016-12-12 15 views
0

以下のいずれかに間違っていると私が理解しているものから、オブジェクトを格納するためにコンテナが使用されます。 マップは、 「要素」として。C++のマップ内のオブジェクト内のオブジェクトのメンバ関数へのアクセス

もしそうなら、パラメータを設定するマップなしでオブジェクトを作成したときのように、これらのオブジェクトのメンバ関数(セッタやゲッタなど)にアクセスするにはどうすればよいですか?

または別の方法で置くために、どのように私は相当行うことができます。マップの

someClass someObject; 
someObject.setSomething(InputVari); 

を?

答えて

0

[] operatorを使用する必要があります。例えば

myMap[myIndex].setVariable(aValue); 

、あなたはsetCurrentLocationに沿って、人々は最初の名前を持っていた鍵、姓、および現在の場所のための文字でクラスPersonのマップを作成したい場合(STD ::文字列aNewLocation)パラメータは、次のようになります。

std::map<char, Person> myMap; 

Person myPersonOne("Phill", "Collins", "England"); 

myMap['A'] = myPersonOne; 

myMap['A'].setNewLocation("New York") 
+0

「インデックス」ビットまたはそれがどのように見えるかの例を明確にすることはできますか? –

+0

例を追加しましたが、それは役に立ちますか? – Foxhound

+0

ここに「車」とは何ですか? @Foxhound –

0

は、私は、次のいずれかで間違っている場合は、コンテナを格納するために使用されている私を修正必ずしもそうではありません

オブジェクト。オブジェクトが大きい場合と同様に、オブジェクトへのポインタを格納することが好ましい場合があり、オブジェクトのコピーを取るのは高価な場合があります。もう1つのケースは、オブジェクトがポリモーフィックで、異なる派生クラスのオブジェクトをコンテナに格納する場合です。ポインタを格納すると、object slicingができなくなります。オブジェクトのメンバーにアクセスする

class Foo{ int A; void bar(){} }; 

map<string, Foo*> myMap; 

auto it = myMap.find("keyToObject"); 

if(it != myMap.end()) { 
    it->A += 1; it->bar(); 
} 

事実を考慮すると、std::map[]を使用しながら、あなたは[]insert()ための便利な表記より少しである、少し慎重する必要があります。 myMap[k]の結果は(∗(myMap.insert(make_pair(k,V{})).first)).secondの結果に相当します。Vがマップされたタイプです。

関連する問題