그냥 다음은 aswell에 대한 넣다 다른 사람이보고 될 수 있습니다 추가 : (참고, 그 중 일부는 사용되지 갈 정도 알려 주시기 바랍니다 있습니다 :)) .H에
!
typedef std::map<std::string,double> lawVariables;
typedef std::map<std::string,double>::iterator lawVars;
struct ObjectCustomData {
std::string objectType;
bool global_lock;
std::map<std::string, lawVariables> lawData;
};
template <typename K, typename V, class C, class A>
std::ostream &operator<< (std::ostream &os, std::map<K,V,C,A> const& m)
{
os << "{ ";
typename std::map<K,V,C,A>::const_iterator p;
for (p = m.begin(); p != m.end(); ++p) {
os << p->first << ":" << p->second << ", ";
}
return os << "}";
}
참고 : 템플릿 소재이므로 전체지도 인지도를 간단하게 작성할 수 있습니다.
void setCustomData();
void showCustomData();
bool checkLaw(std::string law);
bool checkVar(std::string law,std::string var);
double getLawVar(std::string law, std::string var);
template<class T,class A>
void showMap(const std::map<T, A>& v);
ObjectCustomData ocd;
참고 : 그냥 맵에서 맵 테스트 목적을 위해 어떤 임의의 데이터를 채우는 것 setCustomData는 showCustomData는 전체지도를 보여 템플릿 및 사용자 정의 연산자를 사용합니다. checkLaw와 checkVar는 특정 값이 존재 하는지를 확인하고 getLawVar는 특정 법의 특정 값의 값을 반환합니다. showMap은 map-in-map의 전체 내용을 다소 좋은 출력으로 보여줍니다.
cpp :
아뇨, setCustomData를 건너 뛰십시오. ocd.lawData [law] [var] = 123.45;
void showCustomData() {
std::cout <<ocd.lawData<<std::endl;
}
bool checkLaw(std::string law){
if ((int)ocd.lawData[law].size() != 0) {
return true;
}
else {
return false;
}
}
bool checkVar(std::string law, std::string var){
lawVars lVars = ocd.lawData[law].find(var);
if(lVars != ocd.lawData[law].end()){
return true;
}
else {
return false;
}
}
double getLawVar(std::string law, std::string var){
if (checkLaw(law) && checkVar(law, var)){
return ocd.lawData[law].find(var)->second;
}
else {return 0.0;}
}
template<class T, class A>
void showMap(const std::map<T, A>& v) {
for (std::map<T, A>::const_iterator ci = v.begin(); ci != v.end(); ++ci) {
std::cout << ci->first <<" -> ";
lawVariables tmpLaw = ci->second;
lawVars lVars;
for (lVars = tmpLaw.begin(); lVars != tmpLaw.end(); lVars++){
std::cout << lVars->first << " : " << lVars->second <<"\t";
}
std::cout<<std::endl;
}
std::cout<<std::endl;
}
희망 사항은 누군가에게 다소 유용 할 것입니다. 할 수있는 일에 대해 자유롭게 의견을 말하십시오.
@aJ - 테스트 메소드를 컴파일하려고하면 'data [ "law_1"]'에서 'error : no match'연산자 [] '가 발생합니다. 사용자를 대신하여 컴파일합니까? g ++ 컴파일러를 사용하고 있습니다. cygwin에서 – dcp
죄송합니다. 첫 번째 줄은 data.lawData [ "law_1"]이어야합니다. pls는 내 편집을 참조하십시오. –
답장을 보내 주셔서 감사합니다. : D – Karrok