vector mit pair als Inhalt -> Problem



  • Hallo !

    Habe ein Problem mit einem Vector, der als Inhalt ein pair hat.
    Das pair besteht aus einem String und einem Vector mit Strings :

    typedef std::vector<std::string> TVector;
    typedef std::vector<std::pair<std::string,TVector> > TResultSet;
    

    Ich benötige eine Methode, die nach einem Eintrag in dem Vector sucht
    und mir einen Iterator darauf zurückgibt. Etwa so :

    CValueOwner::TResultSet::iterator CValueOwner::findInResultSet(CValueOwner::TResultSet& resultSet, std::string str)
    {
    for(TResultSet::iterator i = resultSet.begin(); i != resultSet.end(); ++i)
    	{
    		std::string first = (*i).first;
    		if(first == str)
    			break;
    	}
    	return i;
    }
    


  • andiG schrieb:

    Habe ein Problem mit einem Vector, der als Inhalt ein pair hat.
    Das pair besteht aus einem String und einem Vector mit Strings :

    typedef std::vector<std::string> TVector;
    typedef std::vector<std::pair<std::string,TVector> > TResultSet;
    

    Ich benötige eine Methode, die nach einem Eintrag in dem Vector sucht
    und mir einen Iterator darauf zurückgibt. Etwa so :

    CValueOwner::TResultSet::iterator CValueOwner::findInResultSet(CValueOwner::TResultSet& resultSet, std::string str)
    {
    for(TResultSet::iterator i = resultSet.begin(); i != resultSet.end(); ++i)
    	{
    		std::string first = (*i).first;
    		if(first == str)
    			break;
    	}
    	return i;
    }
    

    dein code ist müll und deine frage auch.
    zum code: der ist unlesbar. lass mal riesige typedefs wag, schreib nicht immer std:: davor und vor allem lass T und C am anfang weg. dann lass namen zu, unter denen man sich was vorstellen kann, also sicher nicht ValueOwner und ResultSet.
    zur frage: was fragst du überhaupt? was geht denn nicht? wo ist das problem? dein code ist doch fast ok. und fast überhaupt nicht zu lesen. glaubste, irgend wer wird den code nehmen und testen? dazu muß er sich ja erst noch ne klasse CValueOwner bauen.

    suchschleifen bricht man nicht mit break ab, sondern mit return.

    vector<pair<string,Bla> >::iterator find(vector<pair<string,Bla> > & vec,string const& key)
    {
       for(vector<pair<string,Bla> >::iterator = vec.begin(); i != vec.end(); ++i)
       {
          if(i->first == str)
             return i;
       }
       return vec.end();
    }
    


  • volkard schrieb:

    andiG schrieb:

    Habe ein Problem mit einem Vector, der als Inhalt ein pair hat.
    Das pair besteht aus einem String und einem Vector mit Strings :

    typedef std::vector<std::string> TVector;
    typedef std::vector<std::pair<std::string,TVector> > TResultSet;
    

    Ich benötige eine Methode, die nach einem Eintrag in dem Vector sucht
    und mir einen Iterator darauf zurückgibt. Etwa so :

    CValueOwner::TResultSet::iterator CValueOwner::findInResultSet(CValueOwner::TResultSet& resultSet, std::string str)
    {
    for(TResultSet::iterator i = resultSet.begin(); i != resultSet.end(); ++i)
    	{
    		std::string first = (*i).first;
    		if(first == str)
    			break;
    	}
    	return i;
    }
    

    dein code ist müll und deine frage auch.
    zum code: der ist unlesbar. lass mal riesige typedefs wag, schreib nicht immer std:: davor und vor allem lass T und C am anfang weg. dann lass namen zu, unter denen man sich was vorstellen kann, also sicher nicht ValueOwner und ResultSet.
    zur frage: was fragst du überhaupt? was geht denn nicht? wo ist das problem? dein code ist doch fast ok. und fast überhaupt nicht zu lesen. glaubste, irgend wer wird den code nehmen und testen? dazu muß er sich ja erst noch ne klasse CValueOwner bauen.

    suchschleifen bricht man nicht mit break ab, sondern mit return.

    vector<pair<string,Bla> >::iterator find(vector<pair<string,Bla> > & vec,string const& key)
    {
       for(vector<pair<string,Bla> >::iterator = vec.begin(); i != vec.end(); ++i)
       {
          if(i->first == str)
             return i;
       }
       return vec.end();
    }
    

    Danke erstmal. Aber ich war mit dem Beitrag noch nicht fertig, er ist aus Versehen zu früh raus.
    Unter dem Titel "vector mit pair ... war noch nicht fertig !!" wäre der Rest gewesen. Danke für die Hinweise wegen Leserlichkeit und so, es war ja auch mein
    erster Versuch.
    Andi


Anmelden zum Antworten