sort як тартиб барои ададҳо, як тартиб барои сатрҳо ва як тартиб барои ҷуфтҳо медонад. Қоидаҳои воқеӣ мураккабтаранд, ва сохтор тартиб надорад, то даме ки шумо ба он диҳед. Ин дарс ба sort мегӯяд, ки «пеш аз» чӣ маъно дорад.
Компаратор: қоида ҳамчун функсия
Дар мусобиқа n бозингар иштирок кард. Ҳар кадом ном, хол ва шумораи бозиҳои гузаронидашуда дорад. Рейтингро чоп кунед: холи бештар — аввал; барои холи баробар — бозии камтар; баъд аз рӯи алифбо.
Вуруд
Баромад
Қоида се сатҳ дорад. Мо онро ҳамчун функсияи bool аз ду бозингар менависем, ки ба як савол ҷавоб медиҳад: оё a бояд пеш аз b ояд? Баъд функсияро ба sort ҳамчун аргументи сеюм медиҳем, дар ҷое ки пештар greater<int>() меистод:
Ali якум аст (9 хол). Bek ва Timur ҳар кадом 7 хол ва 3 бозӣ доранд, бинобар ин ном ҳал мекунад. Zara 4 бозӣ дорад. Чунин функсия компаратор номида мешавад, ва ҳар компаратор зина аст:
Қоидаҳое, ки компаратор бояд риоя кунад
sort ба компаратор пурра бовар мекунад. Компараторе, ки қоидаҳоро вайрон мекунад, sort-ро водор мекунад, ки партов диҳад ё ҳатто суқут кунад. Ду қоида қариб ҳама чизро фаро мегиранд:
- Қатъият.
cmp(x, x)боядfalseбошад: ҷузъ пеш аз худи худ намеояд. Бинобар ин<ё>-ро истифода баред, ҳеҷ гоҳ<=ё>=-ро не. Зина инро худаш мекунад: калидҳои баробар ба поён мефароянд, ва сатри охиринfalse-ро медиҳад. - Мувофиқат. Агар
aпеш азbваbпеш азcбошад, пасaбояд пеш азcбошад. Санг, қайчӣ ва коғаз инро вайрон мекунанд: санг қайчиро мезанад, қайчӣ коғазро мебуррад, коғаз сангро мепӯшонад. Давраро танзим кардан мумкин нест.
Компаратор ҳеҷ гоҳ ҷузъҳоро тағйир намедиҳад ва ба ҷуз ду аргументи худ чизи дигар намехонад.
Ламбда: компаратор дар ҷо
Барои қоидаи кӯтоҳ функсияи алоҳида хеле зиёд аст. C++ ба шумо имкон медиҳад, ки функсияро дар дохили даъват нависед: [](const string &a, const string &b) { … } функсияи бе ном, ламбда аст. Боқӣ ҳамон: ду истинод const ворид мешавад, bool мебарояд.
Барои pear fig apple kiwi date plum ин fig date kiwi pear plum apple-ро медиҳад: калимаи сеҳарфа, баъд калимаҳои чорҳарфа аз рӯи алифбо, баъд калимаи панҷҳарфа. ҷоест, ки ламбда аз он сар мешавад. Чанд қоида созед ва бубинед, ки онҳо кадом тартибро медиҳанд.