Vector Sort Algorithm, sort only elements bigger then 0

  • A+
Category:Languages

I have to sort a vector of structs. Let's say the struct has two members:

Struct game {   string name;   int rating; }; 

So I have created a std::vector<game> games and simple sort them by rating.

std::sort(games.begin(),games.end(), [](game& info1, game& info2) {     return info1.rating > info2.rating; }); 

Everything is alright so far. The problem is if all games have rating value 0, they mix. Simply put I have to sort only elements with rating bigger than zero. Let's give you an example:

All games are pushed in the vector by names in alphabetic order and rating 0, when a sort is triggered, the alphabet order gets violated.

Example before sort:

"A_Game", "B_Game", "C_Game", "E_Game", "G_Game", etc. (continue with all next letters)

after sort (all games are with rating 0):

"G_Game", "S_Game", "P_Game", "M_Game", "L_Game", "I_Game", etc.

I need to sort only these games that have rating bigger than 0. Thanks in advance.

 


You can use std::stable_sort to prevent moving around elements that are not affected by the sorting criteria.

std::stable_sort(games.begin(),games.end(), [](game& info1, game& info2) {     return info1.rating > info2.rating; }); 

Comment

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: