Аватар для Tanya228
0 / 0 / 0
Регистрация: 20.12.2016
Сообщений: 98
1

Sort(), третий параметр: как sort() выбирает аргументы из переданной последовательности для переданной функции?

15.11.2017, 22:08. Показов 6035. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Вот sotr() 2 параметра - итераторы, а третий функцию. Допустим, моя функция сортирует список по возрастанию сумм цифр числа. Как sort() выбирает аргументы из переданной последовательности для переданной функции? Я скорее всего неправильно определил функцию foo(), просто не врубаюсь, как sort() взаимодействует со своим 3 параметром

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include "stdafx.h"
#include <iostream>
#include <vector>
#include <ctime>
#include <algorithm>
 
using std::vector;
using std::cout;
using std::cin;
using std::sort;
 
bool foo(vector<int>::iterator a, vector<int>::iterator b) {
    return (*a) > (*b);
}
 
int main()
{
    vector<int> v;
    srand((unsigned)time(0));
    int a = 0;
    for (int i = 0; i < 10; i++) {
        a = 1 + rand() % 100;
        v.push_back(a);
    }
 
    sort(v.begin(), v.end(), foo);
        
        for(auto i = v.begin(); i < v.end(); ++i)
        cout << (*i) << ' ';
 
    return 0;
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
15.11.2017, 22:08
Ответы с готовыми решениями:

Справка в текстовом файле о команде, переданной как параметр
Создать в C:\Temp пакетный файл spr.bat, который при запуске его с параметром (параметр – имя соответствующей команды) создает текстовый...

Быстрее ли вывов функции, переданной через параметр шаблона, чем через простой указатель на функцию?
Здравствуйте! Есть два варианта передачи некоторой переменной типа &quot;указатель на функцию&quot; в класс - через параметр шаблона и...

Как изменить значения в переданной функции строке?
void mystrlwr(char *x) { char x1='s'; *x = x1;//Здесь выдается исключение } int main() {

6
7803 / 6567 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
15.11.2017, 22:41 2
Функция получает два параметра того типа, который хранится в векторе. Никаких итераторов там нет. И лучше пиши так:
C++
1
sort(v.begin(), v.end(), [](int a, int b){ return a < b; });
Условие нужное сделай.
1
Эксперт .NET
 Аватар для Даценд
5878 / 4755 / 2939
Регистрация: 20.04.2015
Сообщений: 8,361
15.11.2017, 22:43 3
Цитата Сообщение от Tanya228 Посмотреть сообщение
сортирует список по возрастанию сумм цифр числа
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#include <iostream>
#include <vector>
#include <ctime>
#include <algorithm>
 
using std::vector;
using std::cout;
using std::cin;
using std::sort;
 
int digit_sum(int x) //определение суммы цифр
{
    int sum = 0;
    while (x != 0)
    {
        sum += x % 10;
        x /= 10;
    }
    return sum;
}
 
bool foo(int a, int b) //компаратор
{
    return digit_sum(a) < digit_sum(b);
}
 
int main()
{
    vector<int> v;
    srand((unsigned)time(0));
    int a = 0;
    for (int i = 0; i < 10; i++) {
        a = 1 + rand() % 100;
        v.push_back(a);
    }
 
    sort(v.begin(), v.end(), foo);
 
    for (auto i = v.begin(); i < v.end(); ++i)
        cout << (*i) << ' ';
 
    return 0;
}
1
 Аватар для Tanya228
0 / 0 / 0
Регистрация: 20.12.2016
Сообщений: 98
15.11.2017, 23:56  [ТС] 4
nmcf, только два параметра? Она обязательно должна иметь тип bool?

Добавлено через 2 минуты
Цитата Сообщение от nmcf Посмотреть сообщение
Никаких итераторов там нет
Я имел ввиду, 2 итератора, первые два параметра sort()

Добавлено через 13 минут
nmcf, сорри, я понял про какие итераторы ты имел ввиду
0
495 / 209 / 70
Регистрация: 27.05.2016
Сообщений: 557
16.11.2017, 00:19 5
Цитата Сообщение от Tanya228 Посмотреть сообщение
только два параметра? Она обязательно должна иметь тип bool?
Tanya228, есть же документация: std::sort , к чему эти вопросы?
comp - comparison function object (i.e. an object that satisfies the requirements of Compare) which returns ​true if the first argument is less than (i.e. is ordered before) the second.
The signature of the comparison function should be equivalent to the following:
bool cmp(const Type1 &a, const Type2 &b);
The signature does not need to have const &, but the function object must not modify the objects passed to it.
The types Type1 and Type2 must be such that an object of type RandomIt can be dereferenced and then implicitly converted to both of them. ​
0
Модератор
Эксперт CЭксперт С++
 Аватар для sourcerer
5287 / 2375 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
16.11.2017, 08:09 6
 Комментарий модератора 
Tanya228, пожалуйста, прочитайте правила форума.
Особое внимание обратите на пункт 4.3 (порядок именования тем).

.
0
Модератор
Эксперт CЭксперт С++
 Аватар для sourcerer
5287 / 2375 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
16.11.2017, 08:18 7
Tanya228, почитайте у Николаи Йосуттиса1 в книге "Стандартная библиотека C++. Справочное руководство" в 6 и 7 главе - всё подробнейшим образом разжёвано. И концепция итераторов, и как работают различные контейнеры и алгоритмы, и что такое предикаты.
__________________________
1 На обложке книги значится "Джосаттис", но это ошибка. Правильный вариант произношения именно "Йосуттис".
Миниатюры
Sort(), третий параметр: как sort() выбирает аргументы из переданной последовательности для переданной функции?  
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
16.11.2017, 08:18
Помогаю со студенческими работами здесь

сортировки по переданной функции
Пожалуйста, помогите написать функцию SortBy :: (a -&gt; a -&gt; Ordering) -&gt; -&gt; , сортирующую элементы в списке по переданной сортировочной...

Ошибка 500 в менеджере модулей Joomla - Out of sort memory, consider increasing server sort buffer size
Привет! Подскажите что делать , когда такая проблема ?

Вызов переданной в параметре функции на С/С++
Есть необходимость вызывать произвольную функцию с неизвестным числом параметров переданную в качестве аргумента другой функции. Как это...

Вычислить самое большое произведение пяти подряд идущих цифр в переданной последовательности
Очень прошу помочь, так как в Хаскеле я полный ноль. 1) Напишите функцию, которая вычисляет самое большое произведение 5-ти подряд...

Изменение значения переменной, переданной в тело функции
Здравствуйте Уважаемые жители форума! Столкнулась с такой проблемой. Потихоньку перехожу на классы, очень надело писать одно и тоже. И...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

Новые блоги и статьи
Java Micronaut в Docker: контейнеризация с Maven и Jib
Javaican 16.03.2025
Когда речь заходит о микросервисной архитектуре на Java, фреймворк Micronaut выделяется среди конкурентов. Он создан с учётом особенностей облачных сред и контейнеров, что делает его идеальным. . .
Управление зависимостями в Java: Сравнение Spring, Guice и Dagger 2
Javaican 16.03.2025
Инъекция зависимостей (Dependency Injection, DI) — один из фундаментальных паттернов проектирования, который радикально меняет подход к созданию гибких и тестируемых Java-приложений. Суть этого. . .
Apache Airflow для оркестрации и автоматизации рабочих процессов
Mr. Docker 16.03.2025
Управление сложными рабочими процессами — одна из главных головных болей инженеров данных и DevOps-специалистов. Представьте себе: каждый день нужно запускать десятки скриптов в определенной. . .
Оптимизация приложений Java для ARM
Javaican 16.03.2025
ARM-архитектура переживает настоящий бум популярности в технологическом мире. Когда-то воспринимаемая исключительно как решение для мобильных устройств и встраиваемых систем, сегодня она штурмует. . .
Управление состоянием в Vue 3 с Pinia и Composition API
Reangularity 16.03.2025
Когда я начал работать с Vue несколько лет назад, мне казалось достаточным использовать простую передачу данных через props и события между компонентами. Однако уже на среднем по сложности проекте. . .
Введение в DevSecOps: основные принципы и инструменты
Mr. Docker 16.03.2025
DevSecOps - это подход к разработке программного обеспечения, который объединяет в себе принципы разработки (Dev), безопасности (Sec) и эксплуатации (Ops). Суть подхода заключается в том, чтобы. . .
GitHub Actions vs Jenkins: Сравнение инструментов CI/CD
Mr. Docker 16.03.2025
В этой битве за эффективность и скорость выпуска программных продуктов ключевую роль играют специализированные инструменты. Два гиганта в этой области — GitHub Actions и Jenkins — предлагают разные. . .
Реактивное программировани­е с Kafka Stream и Spring WebFlux
Javaican 16.03.2025
Реактивное программирование – это программная парадигма, ориентированная на потоки данных и распространение изменений. Она позволяет выражать статические или динамические потоки данных и. . .
Простая нейросеть на КуМир: Учебное пособие по созданию и обучению нейронных сетей
EggHead 16.03.2025
Искусственные нейронные сети — удивительная технология, позволяющая компьютерам имитировать работу человеческого мозга. Если вы хотя бы немного интересуетесь современными технологиями, то наверняка. . .
Исполнитель Кузнечик в КуМир: Решение задач
EggHead 16.03.2025
Среди множества исполнителей в системе КуМир особое место занимает Кузнечик — простой, но невероятно полезный виртуальный персонаж, который перемещается по числовой прямой, выполняя ваши команды. На. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru