Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
3 / 4 / 1
Регистрация: 05.01.2015
Сообщений: 468

Сортировка std::array

21.04.2017, 20:52. Показов 2429. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Не получается реализовать сортировку контейнера array...(чтобы вся структура отсортировалась по полю third)

Вот в классе объявляю..


C++
1
2
3
4
5
6
7
8
9
class sorti
{
public:
    array<string,5> first;
    array<string,5> second;
    array<int,5> third;
 
        void sortirovka();
};

И теперь реализую функцию..


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
sorti mas_s[4],tmp;
int n=4;
 
void sorti::sortirovka()
{
//Ввод данных
         for(i=0;i<n;i++)
    {
        getline(cin,mas_s[i].first[i]); 
        cin >> mas_s[i].second[i];
        cin >> mas_s[i].third[i];
                cin.ignore();
    }
 
//Сортировка по array<int,5> third
 
        for (i=0;i<n-1;i++)
    {
          for (j=i;j<n;j++)
        {
            if (mas_s[i].third>mas_s[j].third)
             {
             tmp=mas_s[i];
             mas_s[i]=mas_s[j];
             mas_s[j]=tmp;
             }
        }
    }
 
        for(i=0;i<n;i++)
    {
        cout << mas_job[i].first[i] << " " << mas_job[i].second[i] << " " << mas_job[i].third[i] << "\n";
    }
}
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
21.04.2017, 20:52
Ответы с готовыми решениями:

Расстановка девяти чисел (Turbo C) Выводит ошибку using Matrix = std::array<std::array<int, 3>, 3>; и bool NextSet
#include &lt;iostream&gt; #include &lt;array&gt; using Matrix = std::array&lt;std::array&lt;int, 3&gt;, 3&gt;; // взято отсюда:...

Статическая и динамическая матрица на std::array and std::vector
Всем привет. Решил немного поиграться с шаблонами. Скилл чуть больше 0. Можно ли с помощью шаблонной магии подставить вместо...

Std::array предупреждение
Всем доброго времени суток. Все работает, но вот предупреждение раздражает, что я делаю не так и как его убрать ? Растолкуйте недалекому...

14
331 / 283 / 78
Регистрация: 02.08.2016
Сообщений: 1,008
21.04.2017, 21:03
юзай std::sort
1
3 / 4 / 1
Регистрация: 05.01.2015
Сообщений: 468
21.04.2017, 21:08  [ТС]
DevAlone, а каким образом его прописать..? Его тоже пробовал, но нужно не только сам контейнер один, но и всю структуру отсортировать по нему, но не получилось...
0
331 / 283 / 78
Регистрация: 02.08.2016
Сообщений: 1,008
21.04.2017, 21:14
Цитата Сообщение от manchester_alan Посмотреть сообщение
DevAlone, а каким образом его прописать..? Его тоже пробовал, но нужно не только сам контейнер один, но и всю структуру отсортировать по нему, но не получилось...
Читай документацию, для простых случаев достаточно передать итератор(указатель) на первый элемент и элемент следующий за последним, для более сложных случаев нужен компаратор, т.е. функциональный объект, который будет вызываться при сортировке для сравнения элементов, это может быть функция, лямбда или функтор(класс с перегруженным оператором() )
Вот тут даже примеры есть:
http://en.cppreference.com/w/cpp/algorithm/sort
http://www.cplusplus.com/reference/algorithm/sort/
1
3 / 4 / 1
Регистрация: 05.01.2015
Сообщений: 468
22.04.2017, 21:36  [ТС]
DevAlone, все равно не выходит.. не сортирует..
0
331 / 283 / 78
Регистрация: 02.08.2016
Сообщений: 1,008
22.04.2017, 21:43
Цитата Сообщение от manchester_alan Посмотреть сообщение
DevAlone, все равно не выходит.. не сортирует..
Скинь код
0
3 / 4 / 1
Регистрация: 05.01.2015
Сообщений: 468
22.04.2017, 22:02  [ТС]
DevAlone,
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
sorti mas_s[4],tmp;
int n=4;
 
bool myfunction (int i,int j) { return (i<j); }
 
void sorti::sortirovka()
{
//Ввод данных
         for(i=0;i<n;i++)
    {
        getline(cin,mas_s[i].first[i]); 
        cin >> mas_s[i].second[i];
        cin >> mas_s[i].third[i];
                cin.ignore();
    }
 
//Сортировка по array<int,5> third
 
  sort(third.begin(), third.end(), myfunction);
 
        for(i=0;i<n;i++)
    {
        cout << mas_job[i].first[i] << " " << mas_job[i].second[i] << " " << mas_job[i].third[i] << "\n";
    }
}
Ну примерно так, по другому не знаю, как сделать...
0
2444 / 1842 / 406
Регистрация: 15.12.2013
Сообщений: 8,243
22.04.2017, 22:11
manchester_alan, нам нужен код, который можно скомпилировать. Идеально, если под текстом кода будет еще и ссылка на онлайн-компилятор.
0
3 / 4 / 1
Регистрация: 05.01.2015
Сообщений: 468
22.04.2017, 22:18  [ТС]
S_el, нуу выше еще есть объявление класса и вот остается добавить это
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
int _tmain(int argc, _TCHAR* argv[])
{
  SetConsoleCP(1251);
  SetConsoleOutputCP(1251);
 
  sorti so;
 
  so.sortirovka();
 
  system("pause");
 
  return 0;
}
0
2444 / 1842 / 406
Регистрация: 15.12.2013
Сообщений: 8,243
22.04.2017, 22:28
manchester_alan, ну так и добавьте, в чем проблема?
0
3 / 4 / 1
Регистрация: 05.01.2015
Сообщений: 468
24.04.2017, 06:50  [ТС]
S_el,

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
44
45
46
47
48
49
50
51
52
53
54
55
56
            #include <cstdlib>
            #include <iostream>
            #include <time.h>
            #include <string>
            #include <array>
            #include <iterator>
            #include <algorithm>
     
            using namespace std;
     
            class sorti
        {
        public:
            array<string,5> first;
            array<string,5> second;
            array<int,5> third;
     
                void sortirovka();
        };
     
            sorti mas_s[5],tmp;
            int i,n=5;
     
            bool myfunction (int i,int j) { return (i<j); }
     
            void sorti::sortirovka()
            {
            //Ввод данных
                     for(i=0;i<n;i++)
                {
                    getline(cin,mas_s[i].first[i]); 
                    cin >> mas_s[i].second[i];
                    cin >> mas_s[i].third[i];
                            cin.ignore();
                }
     
            //Сортировка по array<int,5> third
     
              sort(third.begin(), third.end(), myfunction);
     
                    for(i=0;i<n;i++)
                {
                    cout << mas_s[i].first[i] << " " << mas_s[i].second[i] << " " << mas_s[i].third[i] << "\n";
                }
            }
     
            int main() {
     
              sorti so;
     
              so.sortirovka();
     
              system("pause");
     
              return 0;
            }
https://ideone.com/4Hv6F2 вот так?

Добавлено через 17 часов 33 минуты
Так в чем я мог ошибиться?

Добавлено через 14 часов 35 минут
Как провести сортировку?
0
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
24.04.2017, 07:52
manchester_alan,
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <array>
#include <algorithm>
using namespace std;
 
int main()
{
    std::array<int, 5> arr = {17, 11, 99, 1, 14};
 
    std::cout << std::endl << "Before: ";
    for( const auto& it : arr )
        std::cout << it << " ";
 
    std::sort( std::begin( arr ), std::end( arr ) );
 
    std::cout << std::endl << "After: ";
    for( const auto& it : arr )
        std::cout << it << " "; 
}
http://rextester.com/YFBYJ4299
1
3 / 4 / 1
Регистрация: 05.01.2015
Сообщений: 468
24.04.2017, 17:29  [ТС]
rikimaru2013, это просто отсортированный array, это понятно, а мне нужно, чтоб отсортировалась вся структура по одному из array..
0
3 / 4 / 1
Регистрация: 05.01.2015
Сообщений: 468
25.04.2017, 18:07  [ТС]
Именно по third
0
296 / 125 / 106
Регистрация: 30.10.2015
Сообщений: 690
25.04.2017, 18:29
Лучший ответ Сообщение было отмечено manchester_alan как решение

Решение

Вот пример сортировки по определенному полю структуры:
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
#include <iostream>
#include <cstring>
#include <vector>
#include <algorithm>
 
struct People
{
    std::string name;
    unsigned int age; 
};
 
int main()
{
    const unsigned int NumberOfPeoples  = 3;
    std::vector<People> people(NumberOfPeoples);
 
    for (auto &value : people)
        std::cin >> value.name >> value.age;
 
    std::sort(begin(people), end(people), [](const People &v1, const People &v2) {return v1.age > v2.age;}); 
 
    for (const auto &value : people)
        std::cout << value.name << value.age << " ";
    std::cout << std::endl;
}
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
25.04.2017, 18:29
Помогаю со студенческими работами здесь

Резервирование массива std:array
Добрый день. Есть массив std::array&lt;std::string, 20&gt; test; нужно сделать int a = 20; const int b = a; ...

Std::array и список инициализации
Помогите, плес. Как поправить? Вроде же все нармально инициализирую, но выдает ошибку, мол много инициализаторов #include...

Создать матрицу из контейнера std::array
Есть код: #include &lt;iostream&gt; #include &lt;array&gt; using namespace std; int main () { array &lt;int,5&gt; myarray; return...

Std::vector для Array of String
Нужно поместить append первым элементом пустую Array of String. Как-нибудь по-умному это делается? :)

Использование std::array внутри пользовательского класса
Здравствуйте! Я создал класс, одним из полей которого является массив std::array, однако компилятор ругается на константу, что задаёт...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru