사실 내 프로그램에서 코드를 확인하는 데 문제가 있습니다. 벡터에 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를 사용하십시오. derived_1 * d1; d1 = dynamic_cast (iter-> second [i]); if (d1) d1_count ++; –
user1438832
글을 참고하세요 : 다른 루프가 필요합니다. 첫 번째 루프는'map'의 항목을 반복합니다. 'vector'의 항목들을 반복하기 위해서는 또 다른 루프가 필요합니다. –
그래, 방금 벡터에 대한 또 다른 루프가 필요하다는 것을 알았다. 벡터를 통과하는 구문은 무엇입니까? –