Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.83/345: Рейтинг темы: голосов - 345, средняя оценка - 4.83
 Аватар для M@k7
7 / 7 / 1
Регистрация: 17.10.2011
Сообщений: 165

Как сортировать массив при помощи функции sort?

07.11.2011, 15:53. Показов 67367. Ответов 22
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
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
#include "stdafx.h"
#include <iostream> 
 
int _tmain(int argc, _TCHAR* argv[])
{
    int mas [8];
    int i;
    for (i=0;i<8;i++) 
    {
        if ((i % 2)==0) 
        {
            mas[i]=2*i-44;
        }
        else
        {
            mas[i]=i-3;
        }
    }
    std::cout<<"Masuw do sortuwannja"<<"\n";
    for (i=0;i<8;i++)
    {
        std::cout<<mas[i]<<"\n";
    }
 
//Вот здесь надо вставить сортировку массива
    
    return 0;
}
 Комментарий модератора 
Используйте теги форматирования кода!
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
07.11.2011, 15:53
Ответы с готовыми решениями:

Отсортировать заданный целочисленный массив при помощи сортировки выбором (selection sort)
Напишите пожалуста простенькие программы на подобие этой: #include &lt;iostream&gt; using namespace std; void main () { const int...

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

std::sort. Как сортировать список? (список указателей на объект)
Всем доброго времени суток! Извините за флуд темами, я не специально С простыми типами то всё понятно: std::vector&lt;string&gt;...

22
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
07.11.2011, 15:54
M@k7,
C++
1
std::sort(mas, mas + 8);
2
 Аватар для M@k7
7 / 7 / 1
Регистрация: 17.10.2011
Сообщений: 165
07.11.2011, 15:57  [ТС]
пишет что намеспейс стд не содержыт члена сорт
0
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
07.11.2011, 15:58
M@k7,
C++
1
#include <algorithm>
2
 Аватар для M@k7
7 / 7 / 1
Регистрация: 17.10.2011
Сообщений: 165
07.11.2011, 15:59  [ТС]
Искренне благодарен всё работает
0
0 / 0 / 1
Регистрация: 18.02.2018
Сообщений: 112
01.05.2018, 14:44
C++
1
#include <bits/stdc++.h>
Подключает все библиотеки в с++. Чтобы таких проблем не было(в VS такой библиотеки нет)
Цитата Сообщение от M@k7 Посмотреть сообщение
пишет что намеспейс стд не содержыт члена сорт
0
-41 / 49 / 5
Регистрация: 10.01.2017
Сообщений: 1,915
11.04.2019, 16:13
Здравствуйте,

Подскажите пожалуйста, вот имеется двумерный массив вектор вектора:

То есть в нем есть ну к примеру вот такие данные
C++
1
2
3
4
5
6
7
Саратов    100
Москва     500
Питер       400
Питер       410
Волгда      230
Саратов    110
Москва     510
C++
1
sort(Vectors_2.begin(), Vectors_2.end());
Sort работает, но сортировка происходит, как бы по первому столбцу, подскажите пожалуйста, а как сделать чтобы сортировка проходила грубо говоря по второму столбцу ?

Добавлено через 46 минут
Или может быть тогда Вы можете подсказать, какие аргументы принимает sort ?
Потому что, вот так не работает:

C++
1
sort(Vectors_2[0][0], Vectors_2[14][1]);
Я указал первый элемент и последний элемент вектора.
0
 Аватар для zayats80888
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
11.04.2019, 16:35
Optimus11, покажите структуру, которая хранится в векторе
0
-41 / 49 / 5
Регистрация: 10.01.2017
Сообщений: 1,915
11.04.2019, 17:17
Цитата Сообщение от zayats80888 Посмотреть сообщение
Optimus11, покажите структуру, которая хранится в векторе

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
vector<string>Vectors_1;
vector<vector <string>>Vectors_2;
 
Vectors_1.resize(2);
Vectors_2.resize(7);
 
Vectors_1[0]="Саратов";
Vectors_1[1]="100";
Vectors_2[0]=Vectors_1;
 
Vectors_1[0]="Москва";
Vectors_1[1]="500";
Vectors_2[1]=Vectors_1;
 
Vectors_1[0]="Питер";
Vectors_1[1]="400";
Vectors_2[2]=Vectors_1;
 
...
C++
1
2
3
4
5
6
7
Саратов    100
Москва     500
Питер       400
Питер       410
Волгда      230
Саратов    110
Москва     510
0
 Аватар для zayats80888
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
11.04.2019, 17:33
Optimus11,
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
    vector<string>Vectors_1(2);
    vector<vector <string>>Vectors_2;
 
    Vectors_1[0] = "Саратов";
    Vectors_1[1] = "100";
    Vectors_2.push_back(Vectors_1);
 
    Vectors_1[0] = "Москва";
    Vectors_1[1] = "500";
    Vectors_2.push_back(Vectors_1);
 
    Vectors_1[0] = "Питер";
    Vectors_1[1] = "400";
    Vectors_2.push_back(Vectors_1);
 
    sort(Vectors_2.begin(), Vectors_2.end(), [](auto a, auto b) {
        return
            (a.front() < b.front()) ||
            (a.front() == b.front() && a.back() < b.back());
    });
1
-41 / 49 / 5
Регистрация: 10.01.2017
Сообщений: 1,915
12.04.2019, 20:57
Непонимаю, чио такое a и b, как их понимает компилятор ,
И что такое front() и back().
0
 Аватар для Krokodil9798
330 / 145 / 56
Регистрация: 17.10.2015
Сообщений: 580
12.04.2019, 21:32

Не по теме:

Цитата Сообщение от Optimus11 Посмотреть сообщение
как их понимает компилятор
Optimus11, Ну, компилятор же не Вы, чтобы не понимать. Может себе позволить понять.


a и b - переменные, тип которых определится на этапе компиляции.
front() - ссылка на первый элемент вектора, back() - ссылка на последний элемент вектора.
auto - ключевое слово, указывающее компилятора на необходимость самостоятельного вывода типа переменной на этапе компиляции.
1
-41 / 49 / 5
Регистрация: 10.01.2017
Сообщений: 1,915
12.04.2019, 21:48
Цитата Сообщение от Krokodil9798 Посмотреть сообщение

Не по теме:


Optimus11, Ну, компилятор же не Вы, чтобы не понимать. Может себе позволить понять.


a и b - переменные, тип которых определится на этапе компиляции.
front() - ссылка на первый элемент вектора, back() - ссылка на последний элемент вектора.
auto - ключевое слово, указывающее компилятора на необходимость самостоятельного вывода типа переменной на этапе компиляции.
Спасибо!
Но что значит тогда эта запись:
C++
1
a.front() < b.front()
То есть в a примваивается адресс первого элемента вектора и в b присваивается адресс первого элемента вектора и они зачем то сравниваются.
И если front и back это ссылки на первый и последний элемент вектора, то чем запись a.front() отличается от Vectors_2.begin() ?
0
 Аватар для Krokodil9798
330 / 145 / 56
Регистрация: 17.10.2015
Сообщений: 580
12.04.2019, 22:03
Цитата Сообщение от Optimus11 Посмотреть сообщение
То есть в a примваивается адресс первого элемента вектора и в b присваивается адресс первого элемента вектора и они зачем то сравниваются
Не ссылки присваиваются переменным, а сами объекты передаются по ссылке.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void bar(int a)
{
    ++a;
}
 
void foo(int& a)
{
    ++a;
}
 
int a = 7;
bar(a);
std::cout << a << std::endl;
 
foo(a);
std::cout << a << std::endl;
Во функцию foo() объект передаётся по ссылке (но не ссылка на него!), что значит, что действия будут проведены именно с ним, а не с его копией. То же самое с a.front() или a.back() - возвращаются первый и последний элементы вектора по ссылке, соответственно, что позволит их модифицировать при надобности.

Добавлено через 2 минуты
Цитата Сообщение от Optimus11 Посмотреть сообщение
чем запись a.front() отличается от Vectors_2.begin() ?
a.front() - возвращает объект по ссылке.
Vectors_2.begin() - возвращает итератор на первый элемент, тоесть, указатель. Но умный (у него куча полезных методов)
1
-41 / 49 / 5
Регистрация: 10.01.2017
Сообщений: 1,915
12.04.2019, 22:45
Тем более тогда не понимаю, что значит это выражение:
C++
1
a.front() < b.front()
Первый элемент массива переданный по ссылке сравнивается с этим же первым элементом ?
0
 Аватар для Krokodil9798
330 / 145 / 56
Регистрация: 17.10.2015
Сообщений: 580
12.04.2019, 23:18
Цитата Сообщение от Optimus11 Посмотреть сообщение
Тем более тогда не понимаю, что значит это выражение:
Сравнение первых элементов двух векторов.

Добавлено через 21 минуту
Цитата Сообщение от Optimus11 Посмотреть сообщение
Первый элемент массива переданный по ссылке сравнивается с этим же первым элементом ?
Переданный - это если как параметр в функцию передаётся. В данном случае элемент возвращённый по ссылке. Тоесть, не создавалась его копия и любые изменения с этой ссылкой отразятся на первом элементе вектора. Если, конечно, объект возвращён не по константной ссылке - тоесть, такой ссылке, что запрещает модификацию объекта.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Point
{
    double x, y;
    
public:
    Point() : x(1), y(2) {}
 
    double& getX()
    {
        return x;
    }
 
    const double& getX() const
    {
        return x;
    }
};
double& Point::getX() - возвратит переменную х по ссылке и Вы сможете поменять её значение при желании.
const& Point::getX() const - вторая функция мало того, что возвращает объект по константной ссылке, да и ещё и объявлена как константная. Константная функция - функция, которая гарантирует, что её вызов не сделает никаких изменений во внутреннем состоянии класса. По простому - если мы бы даже написали такую функцию:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
class Point
{
    double x, y;
    
public:
    Point() : x(1), y(2) {}
 
    //Ошибка!
    double& Point::getX() const 
    {
         return x;
    }
};
мы бы всё-равно не смогли модифицировать x в Point, так как произошла бы ошибка компиляции, ведь х возвращается по обычной ссылке, а это может привести к изменению состояния класса (изменению значению x).

Добавлено через 4 минуты

Без объявления функции константной тоже можно возвращать константную ссылку на элемент. Но в таком случае мы не сможем вызвать эту функцию в константного объекта.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class Point
{
    double x, y;
    
public:
    Point() : x(1), y(2) {}
 
    const Point::double& getX()
    {
        return x;
    }
};
 
//...
 
Point a;
std::cout << a.getX() << std::endl;
 
const Point b;
std::cout << b.getX() << std::endl;//Ошибка компиляции, так как b - константный экземпляр класса
1
-41 / 49 / 5
Регистрация: 10.01.2017
Сообщений: 1,915
13.04.2019, 16:19
Цитата Сообщение от Krokodil9798 Посмотреть сообщение
Сравнение первых элементов двух векторов.
Не понимаю

Вот код:

C++
1
2
3
4
5
6
7
8
vector<string>Vector_vertical_1;
 
Vector_vertical_1 = { "1","2","3","4","5","6","7","8","9","10" };
 
sort(Vector_vertical_1.begin(), Vector_vertical_1.end(), [](auto a, auto b)
    {
        return  (a.front() < b.front());
    });
C++
1
Сравнение первых элементов двух векторов.
О каких двух векторах может идти речь ? Я просто не могу понять.
0
 Аватар для zayats80888
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
13.04.2019, 16:34
Optimus11, не путайте сортировку вектора векторов строк и вектора строк

Добавлено через 37 секунд
C++
1
sort(Vector_vertical_1.begin(), Vector_vertical_1.end())
0
 Аватар для Krokodil9798
330 / 145 / 56
Регистрация: 17.10.2015
Сообщений: 580
13.04.2019, 16:35
Цитата Сообщение от Optimus11 Посмотреть сообщение
О каких двух векторах может идти речь ?
В данном случае речь идёт об первых элементах каждой строки в векторе Vector_vertical_1 (фактически, все строки в Vector_vertical_1 состоят из одного элемента, так что это может слегка запутать).
Получается, в пямбду будет передаваться две строки для сравнения между собой и будут сравниваться их первые буквы, так как для строк оператор "<" не определён, а для char, коим являются первые буквы каждой строки - в самый раз.
А a.front() и b.front() будут возвращать первые буквы в каждой из переданных строк.
0
 Аватар для zayats80888
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
13.04.2019, 16:38
Цитата Сообщение от Optimus11 Посмотреть сообщение
Vector_vertical_1 = { "1","2","3","4","5","6","7","8","9", "10" }
Ваш вектор уже отсортирован
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
13.04.2019, 16:38
Помогаю со студенческими работами здесь

Как сделать проверку на целостность файла при помощи хеш функции sh-256
Подскажите пожалуйста как сделать проверку на целостность файла при помощи хеш функции sh-256,саму функцию я написал но у меня на входе...

Отсортировать массив при помощи Bucket Sort
Написал функцию на Си которая должна отсортировать массив при помощи Bucket Sort. Когда я заношу в массив числа : 29,25,3,49,9,37,21,43 ...

Как решить уравнение g(x)=0 при помощи функции POLYROOTS
Дан полином g(x)=x^4-2*x^3+x^2-12*x+20 Как решить уравнение g(x)=0 при помощи функции POLYROOTS?????? Что вообще значит УРАВНЕНИЕ вида...

Как заполнить массив MasB при помощи прямой адресации с индексированием?
Как заполнить массив MasB при помощи прямой адресации с индексированием? Лекций в универе нормальных нет, а лабы требуют сдавать. ...

Заполнить массив с помощью функции, и сортировать его через нее же
хочу заполнить массив с помощью функции, потом сортировать его через ету же функцию написал вот, но с вызовом трабл &quot;The name 'str'...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru