#include <set>
#include <iterator>
#include <algorithm>
#include <string>
#include <iostream>
using namespace std;
class Person{
public:
Person(){}
Person(string v , string v1):nazw(v),imie(v1){}
bool operator<(const Person & K) const
{
return ((this->getN()>K.getN())?0:1);
//return ((this->getN()<K.getN())?1:0);
}
string getN()const
{
return nazw;
}
/*
bool operator()(Person & K, Person & K1)
{
return ((K->getN()<K1.getN())?1:0);
}
*/
friend ostream& operator<<(ostream & o , const Person&K)
{
o << K.nazw << " " << K.imie;
return o;
}
friend struct cmp;
private:
string nazw,imie;
};
struct cmp
{
bool operator()(const Person &K , const Person &K1)
{
if (K.getN() < K1.getN())
return true;
if(K1.getN() < K.getN())
return false;
if(K.imie < K1.imie) // will need a friend declaration or a getter() func
return true;
return false;
}
};
int main()
{
//typedef set<Person> kontener_typ;
typedef set<Person,cmp> kontener_typ;
kontener_typ c;
c.insert(Person("Nowak","Jan"));
c.insert(Person("Nowak","Adam"));
c.insert(Person("Kowalski","Jan"));
c.insert(Person("Nowak","Adam"));
c.insert(Person("Iksinski","Adam"));
std::copy (c.begin(), c.end(), ostream_iterator<Person>(cout, " ,"));
std::cout << std::endl;
}
I2luY2x1ZGUgPHNldD4KI2luY2x1ZGUgPGl0ZXJhdG9yPgojaW5jbHVkZSA8YWxnb3JpdGhtPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8aW9zdHJlYW0+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CmNsYXNzIFBlcnNvbnsKcHVibGljOgpQZXJzb24oKXt9ClBlcnNvbihzdHJpbmcgdiAsIHN0cmluZyB2MSk6bmF6dyh2KSxpbWllKHYxKXt9CmJvb2wgb3BlcmF0b3I8KGNvbnN0IFBlcnNvbiAmIEspIGNvbnN0CnsKICAgIHJldHVybiAoKHRoaXMtPmdldE4oKT5LLmdldE4oKSk/MDoxKTsKICAgIC8vcmV0dXJuICgodGhpcy0+Z2V0TigpPEsuZ2V0TigpKT8xOjApOwp9CnN0cmluZyBnZXROKCljb25zdAp7CiAgICByZXR1cm4gbmF6dzsKfQovKgpib29sIG9wZXJhdG9yKCkoUGVyc29uICYgSywgUGVyc29uICYgSzEpCnsKICAgIHJldHVybiAoKEstPmdldE4oKTxLMS5nZXROKCkpPzE6MCk7Cn0KKi8KZnJpZW5kIG9zdHJlYW0mIG9wZXJhdG9yPDwob3N0cmVhbSAmIG8gLCBjb25zdCBQZXJzb24mSykKewogICAgbyA8PCBLLm5hencgPDwgIiAiIDw8IEsuaW1pZTsKICAgIHJldHVybiBvOwp9CmZyaWVuZCBzdHJ1Y3QgY21wOwpwcml2YXRlOgpzdHJpbmcgbmF6dyxpbWllOwp9OwpzdHJ1Y3QgY21wCnsKICAgIGJvb2wgb3BlcmF0b3IoKShjb25zdCBQZXJzb24gJksgLCBjb25zdCBQZXJzb24gJksxKQogICAgewogICAgICBpZiAoSy5nZXROKCkgPCBLMS5nZXROKCkpCiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIGlmKEsxLmdldE4oKSA8IEsuZ2V0TigpKQogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgaWYoSy5pbWllIDwgSzEuaW1pZSkgLy8gd2lsbCBuZWVkIGEgZnJpZW5kIGRlY2xhcmF0aW9uIG9yIGEgZ2V0dGVyKCkgZnVuYwogICAgICAgIHJldHVybiB0cnVlOwogICAgICByZXR1cm4gZmFsc2U7CiAgICB9Cn07CmludCBtYWluKCkKewovL3R5cGVkZWYgc2V0PFBlcnNvbj4ga29udGVuZXJfdHlwOwp0eXBlZGVmIHNldDxQZXJzb24sY21wPiBrb250ZW5lcl90eXA7CmtvbnRlbmVyX3R5cCBjOwpjLmluc2VydChQZXJzb24oIk5vd2FrIiwiSmFuIikpOwpjLmluc2VydChQZXJzb24oIk5vd2FrIiwiQWRhbSIpKTsKYy5pbnNlcnQoUGVyc29uKCJLb3dhbHNraSIsIkphbiIpKTsKYy5pbnNlcnQoUGVyc29uKCJOb3dhayIsIkFkYW0iKSk7CmMuaW5zZXJ0KFBlcnNvbigiSWtzaW5za2kiLCJBZGFtIikpOwpzdGQ6OmNvcHkgKGMuYmVnaW4oKSwgYy5lbmQoKSwgb3N0cmVhbV9pdGVyYXRvcjxQZXJzb24+KGNvdXQsICIgLCIpKTsKc3RkOjpjb3V0IDw8IHN0ZDo6ZW5kbDsKfQ==