Когда я печатаю весь набор, результат не сортируется И он содержит один дубликат.Объект Person
имеет фамилию, фамилию и год рождения (все 3 строки).Сначала я сортирую по году рождения, затем по фамилии, а затем по фамилии.По сути, нет идентичных лиц (но даже если бы это было так, их следует исключить, когда они вставляются в set
).
Чтобы быть более конкретным, я создаю набор таких людей, как этот:
std::set <Person> greatUncles;
и вставьте их так:
greatUncles.insert(Person("bla", "bla", "1900"));
Вот основные вещи из класса Person
:
class Person {
public:
//...
Person(std::string s, std::string f, std::string y)
:surname(s), familyname(f), yearOfBirth(y)
{
}
//...
std::string getSurname() const {
return surname;
}
std::string getFamilyname() const {
return familyname;
}
std::string getYearOfBirth() const {
return yearOfBirth;
}
private:
std::string surname;
std::string familyname;
std::string yearOfBirth;
};
//to print the set, overload the '<<' operator
std::ostream &operator<<(std::ostream &o, const Person &person) {
o << person.getSurname() << " "
<< person.getFamilyname() << " "
<< person.getYearOfBirth() << std::endl;
return o;
}
//to order the set, overload the '<' operator
bool operator< (Person const &p1, Person const &p2) {
int compareYearOfBirth = p1.getYearOfBirth().compare(p2.getYearOfBirth());
if (compareYearOfBirth == 0) {
int compareFamilyname = p1.getFamilyname().compare(p2.getFamilyname());
if (compareFamilyname == 0) {
return p1.getSurname().compare(p2.getSurname());
} else
return compareFamilyname;
} else
return compareYearOfBirth;
}
и вот как явыведите набор двоюродных дедов:
void printGreatUncles(std::set <Person> &greatUncles) {
std::ofstream outputFile;
outputFile.open("greatuncle.dat");
if (outputFile.is_open()) {
for(Person const & person:greatUncles) {
outputFile << person;
}
outputFile.close();
}
}
Теперь вывод в определенном случае должен выглядеть так (отсортировано по году):
Sebastian Furtweger 1942
Nikolaus Furtweger 1951
Archibald Furtweger 1967
, но выглядит это так:
Archibald Furtweger 1967
Sebastian Furtweger 1942
Nikolaus Furtweger 1951
Archibald Furtweger 1967
Я не могу себе представить, что (что) я делаю неправильно.