algorytm find i vector wskaźników

0

Witam
Napisałem następujący program, który używa algorytmu uogólniongo find do wyszukania odpowiendniej struktury.

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

struct struktura
{
    int wartosc;
    struktura(int w){wartosc = w;}
    bool operator==(const struktura* s)
    {
        return wartosc == s->wartosc;
    }
};

int main()
{
    vector<struktura*> vec;
    vec.push_back(new struktura(2));
    vec.push_back(new struktura(3));

    struktura a(3);
    vector<struktura*>::const_iterator iter = find(vec.begin(), vec.end(), &a);
    if(iter != vec.end()) cout << (*iter)->wartosc;
    else cout << "Nie znaleziono";
}

Problem w tym, że algorytm nie chce wyszukać struktury z wartością 3. Domyślam się że jest tak dlatego, że próbuje on porównynwać adresy wskaźników. Dodałem do struktury przeciążenie operatora == ale to nie pomogło. Czy wie ktoś jak mogę sobie z tym poradzić w inny sposób??

0

http://www.parashift.com/c++-faq-lite/class-libraries.html#faq-37.3

 template<typename T>
 class DereferencedEqual {
 public:
   DereferencedEqual(const T* p) : p_(p) { }
   bool operator() (const T* p2) const { return *p_ == *p2; }
 private:
   const T* p_;
 };

 void userCode(std::vector<Fred*> v, const Fred& match)
 {
   std::find_if(v.begin(), v.end(), DereferencedEqual<Fred>(&match));
   ...
 } 
0

Let's Boost!

#include <iostream>
#include <vector>
#include <algorithm>
#include <boost/ptr_container/ptr_vector.hpp>
using namespace std;

struct struktura
{
    int wartosc;
    struktura(int w){wartosc = w;}
    
    bool operator==(const struktura &s)
    {
        return wartosc == s.wartosc;
    }
};

int main()
{
    boost::ptr_vector<struktura> vec;
    vec.push_back(new struktura(2));
    vec.push_back(new struktura(3));

    struktura a(3);
    boost::ptr_vector<struktura>::const_iterator iter = find(vec.begin(), vec.end(), a);
    if(iter != vec.end())
        cout << iter->wartosc; //!! wystarczy tylko -> 

    else cout << "Nie znaleziono";
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1