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

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

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

Студворк — интернет-сервис помощи студентам
Вот 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.11.2017, 22:08
Ответы с готовыми решениями:

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

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

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

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

6
7653 / 6457 / 2945
Регистрация: 14.04.2014
Сообщений: 28,159
15.11.2017, 22:41 2
Функция получает два параметра того типа, который хранится в векторе. Никаких итераторов там нет. И лучше пиши так:
C++
1
sort(v.begin(), v.end(), [](int a, int b){ return a < b; });
Условие нужное сделай.
1
Эксперт .NET
5869 / 4746 / 2940
Регистрация: 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
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Эксперт С++
5279 / 2366 / 342
Регистрация: 20.02.2013
Сообщений: 5,766
Записей в блоге: 20
16.11.2017, 08:09 6
 Комментарий модератора 
Tanya228, пожалуйста, прочитайте правила форума.
Особое внимание обратите на пункт 4.3 (порядок именования тем).

.
0
Модератор
Эксперт CЭксперт С++
5279 / 2366 / 342
Регистрация: 20.02.2013
Сообщений: 5,766
Записей в блоге: 20
16.11.2017, 08:18 7
Tanya228, почитайте у Николаи Йосуттиса1 в книге "Стандартная библиотека C++. Справочное руководство" в 6 и 7 главе - всё подробнейшим образом разжёвано. И концепция итераторов, и как работают различные контейнеры и алгоритмы, и что такое предикаты.
__________________________
1 На обложке книги значится "Джосаттис", но это ошибка. Правильный вариант произношения именно "Йосуттис".
Миниатюры
Sort(), третий параметр: как sort() выбирает аргументы из переданной последовательности для переданной функции?  
1
16.11.2017, 08:18
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.11.2017, 08:18
Помогаю со студенческими работами здесь

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

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

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

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

Сохранение изменений, произведённых в функции с переменной, переданной в эту функцию в качестве параметра.
Всем привет. Собственно, как это можно сделать? :) Пробовал переменную делать и локальной, и...

Как получить количество переданной информации?
Socket.SendStream(); Как получить количество переданной информации?


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru