operator() do porownywania obiektow

0

Wydaje mi sie ze widzialem gdzies post @n0name_l juz poruszajacy ta sprawe no ale,

http://ideone.com/sm3z56
chcialbym wybrac sobie min_element z posrod tych 4 obiektow na podstawie mDistance. ALE nie chce dawac dostepu do tej zmiennej. W sensie nie chce dawac gettera do tej zmiennej, czy robic ja public. Bo jezeli bylaby dostepna to wtedy problemu nie ma bo uzywam lambdy jako 3 parametru i nie ma problemu, ale rodzi sie pytanie. Czy da sie to zrobic jakos normalnie bez tworzenia sztucznych rzeczy? (bo mozna to wbudowac w klase (comparer) i zrobic ja friend, ale czy to nie jest to samo co getter?)

5

Przeciąż bool operator<(const Ship &a,const Ship &b)

1

A dlaczego zwykłe przeciążanie operator< Cię nie zadowala?

0

Dawno w c++ nie programowalem, po googlowaniu znalazlem ze lepiej uzywac operatora. I jezeli ze zwyklymi obiektami dziala tak ze wskaznikami nie...
Tak to jest jak sie w jezyku 2 lata nie programuje zawodowo to sie zapomina duzo rzeczy
Zapewne robie cos glupiego...

http://ideone.com/wb2mOY

3
#include <iostream>
#include <vector>
#include <memory>
#include <algorithm>
using namespace std;


class Ship
{
public:
    Ship(){}
    Ship(string name, int distance)
    {
        mName = name;
        mDistance = distance;
    }
    ~Ship(){}
    friend ostream & operator << (ostream &out, const Ship &ship);
    bool operator < (const Ship& str) const
    {
        return (mDistance < str.mDistance);
    }
private:
    string mName;
    int mDistance;
};

ostream & operator << (ostream &out, const Ship &ship) 
{
   return out << ship.mName << endl;
}

struct ptr_less {
	template<typename T>
	bool operator()(T lhs, T rhs) {
		return *lhs < *rhs;
	}
};


int main() {
	vector<shared_ptr<Ship>> ships;
	ships.push_back(make_shared<Ship>("some1", 20));
	ships.push_back(make_shared<Ship>("some2", 10));
	ships.push_back(make_shared<Ship>("some3", 5));
	ships.push_back(make_shared<Ship>("some4", 40));
	
	sort(ships.begin(), ships.end(), ptr_less{});
	
	for (auto ship : ships) cout << *ship;
	
	return 0;
}
2

A opakowanie wskaźników w klasy? http://ideone.com/23uJ4v

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