私のプログラムで実際にチェックしているコードに問題があります: ベクトルには3種類の派生オブジェクトが含まれていますが、ベクトル内の各基本オブジェクトの小計が必要です。私はそれのための適切な構文を見つけることもできない。STL std :: mapとstd :: vector;マップ内のオブジェクトタイプを確認する
class Base{
virtual void method() = 0;
}
class derived_1 : public Base{
virtual void method();
}
class derived_2 : public Base{
virtual void method();
}
class derived_3 : public Base{
virtual void method();
}
class general_class{
private:
//objects of derived types have been instantiated into the vector already
map<string,vector<Base*>> base_map;
void print(){
//This line prints the key and size
cout << iter->first << " " << iter->.size();
int d1_count = 0, d2_count = 0,d3_count = 0;
for(iter=accounts_map.begin();iter !=accounts_map.end();iter++){
//So I know that the loop iterates through the map
//how do I fact check to determine which object was found?
//The below code is incorrect
if(iter->second[i] == (derived_1 /*"objects"*/)){
d1_count++;
}
if(iter->second[i] == (derived_2 /*"objects"*/)){
d2_count++;
}
if(iter->second[i] == (derived_3 /*"objects"*/)){
d3_count++;
}
}
}
}
構文が正しいか、正しいオブジェクトタイプを確認するロジックが不明です。
dynamic_castを使用してください。導かれた1 * d1; d1 = dynamic_cast(iter-> second [i]); if(d1)d1_count ++; –
user1438832
ところで、別のループが必要です。最初のループは 'map'の項目を反復します。 'vector'の項目を繰り返し処理するためには別のループが必要です。 –
ええ、私はちょうど私がベクトルのための別のループが必要であることに気づいた。どのようなベクトルを通過するための構文ですか? –