Sunteți pe pagina 1din 4

#include <random>

#include <string>
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;

//construim clasa produs care contine urmatorii membrii publici:


/*
* nume_produs
* pretul produsului
* cantitatea produsului
*/
class produs {
public:
char nume_produs[20];
int pret;
int cantitate;
};

int main()
{
//declar doua valori de tip intreg, k si x, unde:
/*
* k = optiunea daca dorim sa alegem un alt tip de sortare
* x = optiunea pentru meniu
*/
int k, x;
do{
//am construit un meniu pentru alegerea mai multor tipuri de sortare
in functie de mai multe criterii
//toate cazurile folosc functia comp
cout<<"MENIU";
cout<<"\nAlegeti sortarea dorita pentru produse: 1 - std::sort, 2 -
std::stable_sort, 3- std::nth_sort"<<endl;
cin>> x; //citesc optiunea dorita de la tastatura
//initializez produsele intr-un vector de tip produs
vector<produs> produse = {{"Televizoare",25000,25},
{"Telefoane",3600,20},{"Tablete",5710,12}
,{"Incarcatoare",2400,80}, {"Cabluri",53200,203}};
//folosesc switch pentru diferitele cazuri de sortare
switch(x){
case 1:{
//std::sort
cout<<"Produsele sunt sortate crescator in functie de pret,
folosind std::sort!"<<endl;
sort(produse.begin(), produse.end(), [](const produs &a, const
produs &b){
return a.pret < b.pret;
});
//afisez elementele sortate
for(const auto &el: produse)
cout<<el.nume_produs<< " "<<el.pret<<" " << el.cantitate<<
endl;
}
break;
case 2:{
//std::stable_sort
cout<<"Produsele sunt sortate crescator in functie de
cantitate, folosind std::stable_sort!"<<endl;
stable_sort(produse.begin(), produse.end(), [](const produs
&a, const produs &b){
return a.cantitate < b.cantitate;
});
//afisez elementele sortate
for(const auto &el: produse)
cout<<el.nume_produs<< " "<<el.pret<< " "<<
el.cantitate<<endl;
}
break;
case 3:{
/*folosesc nth_element alegand un element, iar ce este mai mic
decat elementul este inainte si ce este mai mare decat elementul
este dupa acesta.*/
//sortez in functie de pret
//std::nth_element
nth_element(produse.begin(), produse.begin() + 2,
produse.end(), [](const produs &a, const produs &b){
return a.pret < b.pret;
});
//afisez elementele sortate
for(const auto &el: produse)
cout<<el.nume_produs<< " "<<el.pret<< " "<<
el.cantitate<<endl;
}
}
//interogarea pentru a alege un tip nou de sortare
cout<<"Doriti sa alegeti un tip de sortare diferit? 1- da, 0 -
nu"<<endl;
cin>>k;
} while(k == 1); //conditie pentru a parcurge codul
}
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;

int main()
{
int x, k;
string produse[] = {
"Banane", "Mere", "Ananas", "Pere",
"Kiwi", "Capsuni"
};
int pret[] = {20, 58, 45, 96, 74, 88};
vector<int> p(pret, pret+5);
sort(p.begin(), p.end());
vector<int>::iterator low, up;

do{
cout<<"MENIU"<<endl;
cout<<"Alegeti optiunea dorita: 1 - lower_bound, 2 -
upper_bound"<<endl;
cin>>x;
switch(x)
{
case 1:{
cout<<"lower_bound"<<endl;
low=std::lower_bound (p.begin(), p.end(), 50);
std::cout << "lower_bound at position " << (low- p.begin())<<
'\n';
}
break;
case 2:{
cout<<"upper_bound"<<endl;
up= std::upper_bound (p.begin(), p.end(), 65);
std::cout << "upper_bound at position " << (up - p.begin())<<
'\n';
}
break;
}
cout<<"Doriti sa alegeti o noua optiune? 1 - da, 0 - nu!"<<endl;
cin>>k;
}while(k == 1);
return 0;
}

S-ar putea să vă placă și