int rausbekommen aus queue<pair<int , char* > >, wenn man ein char* hat
-
Hallo,
alles steht eigentlich schon im Titel.
Ich brauche so eine schleife, mit der ich aus der queue den int rausbekomme, der einem gewissen char* enstspricht.Danke im Voraus für die Vorschläge.
CP
-
Hmm std::find nehmen
Nen passende struct dafür schreiben, die dir das dann macht, und fertig 
struct compare_char { compare_char(std::string const& string) : compare_string(string) {} bool operator()(std::pair<int, char*> const& item) const { return std::strcmp(item.second, compare_string.c_str()) == 0; } private: const std::string compare_string; };std::find(my_deque.begin(), my_deque.end(), compare_char("mein String"));... sollte eigtl. gehen ^^
-
ich bin glaube ich noch nicht so weit

-
ich bin glaube ich noch nicht so weit
Dann solltest du wahrscheinlich auch besser std::pair<int, std::string> als Element deiner Deque nehmen, da du bei char* ja selber für die Speicherverwaltung sorgen müßtest.
-
So scheint es zu funktionieren. Ich habe aber den Vector genommen.
Passt es so für den Anfang?
char* ippcc = "0.0.0.2:000000"; vector<pair<int , char* > > vector_int_charArr; pair<int , char* > pair1(1, "0.0.0.1:000000"); pair<int , char* > pair2(2, "0.0.0.2:000000"); pair<int , char* > pair3(3, "0.0.0.3:000000"); vector_int_charArr.push_back(pair1); vector_int_charArr.push_back(pair2); vector_int_charArr.push_back(pair3); for (uint i = 0; i< vector_int_charArr.size(); i++){ cout<<"vector_int_charArr[i] = "<<vector_int_charArr[i].first<<" "; cout<<"vector_int_charArr[i] = "<<vector_int_charArr[i].second<<" "; if (vector_int_charArr[i].second == ippcc){ cout<<"It's the right int "<<vector_int_charArr[i].first<<" "; } } cout<<endl;
-
Ne, weil mit char*==char* kommt nix vernünftiges raus, da nur Zeiger verglichen werden. Bzw hier würde wahrscheinlich schon was vernünftiges rauskommen, aber es macht nicht wirklich das, was du willst. Kurz: Guck dir mal strcmp an

-
OK! hab's jetzt so gemacht und das geht
if (strcmp(vector_int_charArr[i].second , ippcc) == 0){ cout<<"It's the right int "<<vector_int_charArr[i].first<<" "; }
-
Perfécto

Was auch noch elegant wäre: Die Schleife statt mit einer Int-Variable mit einem Iterator durchzulaufen:
// statt for (uint i = 0; i< vector_int_charArr.size(); i++) // dann for ( vector< pair<int,char*> >::iterator elemIter=vector_int_charArr.begin(); elemIter!=vector_int_charArr.end(); elemIter++ ) // und den Zugriff mit *elemIter // also cout<<"vector_int_charArr[i] = "<< elemIter->first <<" "; cout<<"vector_int_charArr[i] = "<< elemIter->second <<" "; if ( strcmp(elemIter->second , ippcc) == 0 ) cout<<"It's the right int "<< elemIter->first <<" ";
-
Oder wie oben von mir schon geschrieben, einfach std::find-Algorithmus nutzen und nur einen passenden Funktor anlegen

-
Wenn du std::string benutzen würdest, dann könntest du auch einfach "if(s1 == s2)" schreiben.
Und eigentlich ist dein Code nicht Standard-C++ konform, da du wenigstens "const char *" benutzen müßtest (denn String-Literale sind konstant).