Implementación de topThreeSales
A continuación una posible implementación del algoritmo que discutimos en clase para determinar los tres mejores vendedores. En este caso estoy usando el ADT vector
en vez de ADT list
pues la implementación de la lista en el Standard Template Library es un poco confusa para esta etapa del curso. El ADT vector
cuenta con las operaciones que dijimos que son típicas de las listas (insertar, remover, tamaño, etc), pero usa nombres distintos, por ejemplo: append
se llama push_back
.
Tomé par de decisiones de implementación que no serían del agrado de los puristas de Object Oriented Programming, tales como hacer públicos los data members de la clase. Pero la vida es muy corta para ponerme a hacer getters y setters.
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;
// a class to represent each sales person
class salesPerson {
public:
string name;
int amount;
salesPerson(string n=0, int a=0) {
name = n; amount = a;
}
};
// This function is needed by the sort function to be able to compare
// the records by their amount data member
bool compareAmounts(const salesPerson &a, const salesPerson &b ) {
return a.amount > b.amount;
}
// This is the function we did at the classroom
void topThree(const vector<salesPerson> &A) {
vector<salesPerson> Best;
for (int i = 0; i < 3; i++) {
Best.push_back(A[i]);
}
sort(Best.begin(), Best.end(), compareAmounts);
for (int i = 3; i < A.size(); i++) {
if (A[i].amount > Best[2].amount) {
Best[2] = A[i];
sort(Best.begin(), Best.end(), compareAmounts);
}
}
for(int i = 0; i < 3; i++) {
cout << Best[i].name << " " << Best[i].amount << endl;
}
}
// The main function will create a sample vector of salesPersons
int main(){
vector<salesPerson> all {{"lia",12},{"ana",9}, {"nina",3},
{"mar",15}, {"lobo",19}, {"raf", 5}};
topThree(all);
return 0;
}