Задача состоит в следующем:
Дана последовательность чисел. Cледует упорядочить их по неубыванию последней цифры, а при равенстве последних цифр – по неубыванию самих чисел.
Пример:
Входные данные: 12 15 43 13 20 1 15
Выходные данные: 20 1 12 13 43 15 15
Код:
#include "stdafx.h"
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
bool mySort(int x, int y)
{
if (x == y)
{
return x < y;
}
else return x % 10 < y % 10;
}
int main()
{
vector<int> myVector;
myVector.push_back(12);
myVector.push_back(15);
myVector.push_back(43);
myVector.push_back(13);
myVector.push_back(20);
myVector.push_back(1);
myVector.push_back(15);
for (vector<int>::iterator it = myVector.begin(); it != myVector.end(); it++)
cout << *it << endl;
cout << endl;
sort(myVector.begin(), myVector.end(), mySort);
for (vector<int>::iterator it = myVector.begin(); it != myVector.end(); it++)
cout << *it << endl;
system("pause");
return 0;
}
Выводится:
20 1 12 43 13 15 15
Возможно не совсем понял работу предиката, или где-то ошибка(используется однозначное число). Объясните поподробней работу предиката и все,что с этим связано,а также исправьте код.Спасибо.
bool mySort(int x, int y)
{
if (x % 10 != y % 10) return (x % 10 < y % 10);
return x < y;
}
Вам же сначала нужно проверить последнюю цифру, и только если они равны, сравнивать сами числа.
Вот рабочий код - https://ideone.com/EgDyWy
Предикат получает два значения из сортируемой коллекции и сравнивает их. Какие именно значения - это уже определяется алгоритмом, но предикат должен обеспечивать слабое упорядочение (кажется, так).
Ваш предикат принимает те же 43 и 13 как равные: поскольку они не равны, он сравнивает их последнюю цифру. А она одна и та же. В результате и на вопрос "43 меньше 13?", и на вопрос "13 меньше 43?" ответ один - нет. А значит, 13 и 43 с точки зрения вашего предиката - равны.
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости