prädikat zum vector vergleichen



  • steh grad sowas von auf dem schlauch...

    warum funktioniert das nicht?
    error C2664: 'compStruct': Konvertierung des Parameters 1 von 'std::_Vector_iterator<_Myvec>' in 'const teststruct &' nicht möglich

    #include<iostream>
    using namespace std;
    #include <iterator>
    #include <vector>
    
    struct teststruct{	
    
    	int val1;
    	int val2;
    
    };
    
    bool compStruct(const teststruct& v1, const teststruct& v2){
    
    	return v1.val1<v2.val2;
    }
    
    int main(){
    	vector<teststruct> i;
    	teststruct v;
    	v.val1=1;
    	v.val2=15;
    
    	i.push_back(v);
    	v.val1=12;
    	i.push_back(v);
    
    	compStruct(i.begin(), i.end());
    
    	return 0;
    }
    


  • begin() und end() sind Iteratoren. Ein Iterator ist kein teststruct. end() ist auch nicht das letzte Element, sondern zeigt auf das Element *hinter* dem letzten.

    du könntest std::sort verwenden:

    std::sort(i.begin(), i.end(), compStruct);
    

    wenn du unbedingt das erste und letzte Element haben möchtest, kannst du std::vector::front() und std::vector::back() verwenden.



  • das ganze is nur n kleiner ausschnit aus einer template funktion

    isSorted(TItor begin, TItor end, func f)

    hab zwei iteratoren un muss dies per prädikat vergleichen

    f(*begin, *end) funktioniert auch nicht

    (ob es jetzt begin, end oder willkürlicher iterator aus dem container ist, ist irrelevant

    thx für die schnelle antwort



  • beispielsweise

    std::equal überprüft doch auch auf

    f(*iter1, *iter2)

    wenn dieser einen vector<mystruct> bekommt müsste das doch auch nicht funktionieren oder?

    http://www.cplusplus.com/reference/algorithm/equal/



  • kk

    vl. bin ich nur ziemlich übernachtig

    f(*iter, *iter) funktioniert doch

    ka. wo vorher der fehler war....

    thx trotzdem!!!


Log in to reply