Вот моя идея :
Есть какой-то массив объектов одного класса.
Прим. класса :
class employee {
public:
int age; // Возраст
std::string employeeLname;//Фамилия
long int salary; // зарплата
//далее описание его методов и т.д.
//...
};
Я не понял, чем тебя не устраивает, скажем, стандартный std::sort с твоим предикатом сравнения? Просто пишешь функцию, как сравнивать 2 элемента таблицы между собой, и передаешь эту функцию в sort() третьим параметром. Все, больше ничего не надо...
Скажем, чтобы отсортировать
bool PartialOne(const employee& first, const employee& second) {
if(first.salary == second.salary) {
return (first.age < second.age);
}
else return (first.salary < second.salary);
}
...
sort(vec.begin(), vec.end(), PartialOne);
...
хм..не совсем понятно мне,как же быть тогда с массивом объектов?или std::sort() использовать в цикле?..
also, прощу прощения за глупый вопрос.и ещё,в примере ошибка?
sort(vec.begin(), vec.end(), PartialOne);
#include <iostream>
#include <vector>
using namespace std;
class employee {
friend ostream& operator << (ostream&, const employee&);
public:
int age; // Возраст
std::string employeeLname; //Фамилия
long int salary; // зарплата
// ...
};
bool FullSort(const employee& first, const employee& second) {
if(first.employeeLname == second.employeeLname) {
if(first.age == second.age) {
return (first.salary < second.salary);
}
else return (first.age < second.age);
}
else return (first.employeeLname < second.employeeLname);
}
bool PartialOne(const employee& first, const employee& second) {
if(first.salary == second.salary) {
return (first.age < second.age);
}
else return (first.salary < second.salary);
}
ostream& operator << (ostream& os, const employee& obj)
{
os << obj.employeeLname << "\t" << obj.age << "\t" << obj.salary << endl;
return os;
}
const int size = 9;
employee tbl[size] = {
{30, "ivanov", 1000},
{32, "ivanov", 1150},
{32, "ivanov", 1170},
{34, "petrov", 1200},
{29, "andreev", 1100},
{25, "andreev", 1130},
{24, "andreev", 1180},
{25, "alexeev", 985},
{27, "sidorov", 1100}
};
int main() {
vector<employee> vec; // массив объектов...
for(int i = 0; i < size; i++) {
vec.push_back(tbl[i]);
}
cout << "First sort:" << endl;
// Полная сортировка, по фамилии -> возрасту -> зарплате
sort(vec.begin(), vec.end(), FullSort);
for(int i = 0; i < size; i++) {
cout << vec[i];
}
cout << "Second sort:" << endl;
// сортировка по зарплате -> возрасту
sort(vec.begin(), vec.end(), PartialOne);
for(int i = 0; i < size; i++) {
cout << vec[i];
}
}