Форум программистов, компьютерный форум CyberForum.ru

Есть лёгкий способ отсортировать? - C++

Восстановить пароль Регистрация
 
gromo
 Аватар для gromo
366 / 265 / 24
Регистрация: 04.09.2009
Сообщений: 1,214
27.06.2014, 19:42     Есть лёгкий способ отсортировать? #1
Вобщем есть 3 вектора одинаковой размерности. Нужно отсортировать первый вектор, а остальные два точно также, то есть если в первом векторе 5 элемент после сортировки стал вторым, то также должны поступить и остальные два вектора. |
Есть идеи как это сделать без особых заморочек?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.06.2014, 19:42     Есть лёгкий способ отсортировать?
Посмотрите здесь:

Есть ли C++ нативный способ быстро обнулить массив (аналог bzero)? + ещё 2 вопроса C++
C++ Есть ли способ просмотреть код библиотечных функций?
Есть ли способ получить доступ к MS Office color picker C++
C++ Есть ли более удобный способ перевода переменную в строку?
C++ Анализ данных с COM порта. Есть ли способ чтения файла в процессе его изменения?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zss
Модератор
Эксперт С++
 Аватар для zss
5942 / 5547 / 1783
Регистрация: 18.12.2011
Сообщений: 14,164
Завершенные тесты: 1
27.06.2014, 19:51     Есть лёгкий способ отсортировать? #2
1 способ.При перестановки элементов основного массива переставляйте элементы второго и третьего.
2 способ.Заведите дополнительный массив, в который записывайте номер элемента,
который оказался на переставленном месте. Т.е. в начале в нем числа 0,1,2....,
если меняете 1 со 2 получаете 0,2,1,3... и т.д. Тогда после сортировки будет известно,
какой элемент поставить на какое место.
gromo
 Аватар для gromo
366 / 265 / 24
Регистрация: 04.09.2009
Сообщений: 1,214
27.06.2014, 20:02  [ТС]     Есть лёгкий способ отсортировать? #3
zss, спасибо, но это с заморочками то есть нужно свой алгоритм сортировки писать, мне бы вот средствами STL
0x10
2425 / 1597 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
27.06.2014, 20:05     Есть лёгкий способ отсортировать? #4
gromo, тупой и не очень эффективный способ - свалить все векторы в один вектор структур из трех полей, отсортировать по первому полю, результат обратно распределить по векторам.
gromo
 Аватар для gromo
366 / 265 / 24
Регистрация: 04.09.2009
Сообщений: 1,214
27.06.2014, 20:10  [ТС]     Есть лёгкий способ отсортировать? #5
0x10, а можно подробнее, что-то не пойму, вектор каких структур?
0x10
2425 / 1597 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
27.06.2014, 20:17     Есть лёгкий способ отсортировать? #6
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
#include <algorithm>
#include <functional>
#include <iostream>
#include <tuple>
#include <vector>
 
int main() {
    std::vector<int> first {5, 4, 3, 2, 1},
        second {1, 2, 3, 4, 5},
        third {6, 7, 8, 9, 10};
        
    typedef std::tuple<int, int, int> Tuple;
    std::vector<Tuple> tuples;
    for (auto i = 0u; i < first.size(); ++i) {
        tuples.push_back(std::make_tuple(first[i], second[i], third[i]));
    }
    
    for (const auto& item : tuples) {
        std::cout << std::get<0>(item) << " "
            << std::get<1>(item) << " "
            << std::get<2>(item) << std::endl;
    }
    std::cout << std::endl;
    
    std::sort(tuples.begin(), tuples.end(),
        [](const Tuple& lhs, const Tuple& rhs) {
            return std::get<0>(lhs) < std::get<0>(rhs); 
        });
        
    for (const auto& item : tuples) {
        std::cout << std::get<0>(item) << " "
            << std::get<1>(item) << " "
            << std::get<2>(item) << std::endl;
    }
    
    return 0;
}
http://ideone.com/MawcFX
gromo
 Аватар для gromo
366 / 265 / 24
Регистрация: 04.09.2009
Сообщений: 1,214
27.06.2014, 20:36  [ТС]     Есть лёгкий способ отсортировать? #7
0x10, Ого, вот это я понимаю жесткий способ отсортировать
В моем случае вектор будет от силы на 20 элементов, может для такого и правда дешевле будет написать/содрать какую-нибудь примитивную сортировку и просто проранжировать одновременно 3 массива, как сказал zss ?

Да и лучше emplace_back() использовать в 15 строке, не так ли? Но идея оригинальная ничего не скажешь
Kukurudza
104 / 85 / 6
Регистрация: 29.08.2012
Сообщений: 539
27.06.2014, 20:41     Есть лёгкий способ отсортировать? #8
академическая задачка? баблсорт сделайте, если да.
gromo
 Аватар для gromo
366 / 265 / 24
Регистрация: 04.09.2009
Сообщений: 1,214
27.06.2014, 20:44  [ТС]     Есть лёгкий способ отсортировать? #9
академическая задачка? баблсорт сделайте, если да.
Нет, не академическая, и как раз поэтому я всё больше склоняюсь к пузырьковой))
0x10
2425 / 1597 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
27.06.2014, 20:45     Есть лёгкий способ отсортировать? #10
Цитата Сообщение от gromo Посмотреть сообщение
Да и лучше emplace_back() использовать в 15 строке, не так ли?
emplace, предварительно еще reserve на это безобразие. Я ж на автомате накатал.
Цитата Сообщение от gromo Посмотреть сообщение
Но идея оригинальная ничего не скажешь
Да то же самое, что zss предлагал вторым способом, только вместо одного массива индексов хранится N массивов копий объектов, что, понятно, затратно по памяти.
Цитата Сообщение от gromo Посмотреть сообщение
В моем случае вектор будет от силы на 20 элементов, может для такого и правда дешевле будет написать/содрать какую-нибудь примитивную сортировку и просто проранжировать одновременно 3 массива
Как удобнее. Мне было бы влом писать свой алгоритм, и успокоился бы на сортировке вектора пар, где первый элемент пары - объект из массива, второй - его индекс в неотсортированном массиве.
Kukurudza
104 / 85 / 6
Регистрация: 29.08.2012
Сообщений: 539
27.06.2014, 20:47     Есть лёгкий способ отсортировать? #11
а мапу если поюзать?
Tulosba
:)
Эксперт C++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
27.06.2014, 20:48     Есть лёгкий способ отсортировать? #12
Цитата Сообщение от gromo Посмотреть сообщение
лёгкий способ отсортировать
От Аллена Карра
gromo
 Аватар для gromo
366 / 265 / 24
Регистрация: 04.09.2009
Сообщений: 1,214
27.06.2014, 21:13  [ТС]     Есть лёгкий способ отсортировать? #13
Цитата Сообщение от Kukurudza Посмотреть сообщение
а мапу если поюзать?
и каким образом?
Kukurudza
104 / 85 / 6
Регистрация: 29.08.2012
Сообщений: 539
27.06.2014, 21:17     Есть лёгкий способ отсортировать? #14
ключи - элементы первого массива, значения- пары соответствующих указателей на элементы из 2 и 3 массивов. хотя этот вариант принципиально особо ничем не отличается от выше описанных.

Добавлено через 1 минуту
вообще, если возникла задача соответствия, может архитектура построена немного неправильно?
gromo
 Аватар для gromo
366 / 265 / 24
Регистрация: 04.09.2009
Сообщений: 1,214
27.06.2014, 21:19  [ТС]     Есть лёгкий способ отсортировать? #15
Цитата Сообщение от Kukurudza Посмотреть сообщение
если возникла задача соответсвия, может немного архитектура построена немного неправильно?
Возможно и так, буду смотерть.
P.s. Всем большое спасибо за помощь
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.06.2014, 06:19     Есть лёгкий способ отсортировать?
Еще ссылки по теме:

Есть ли способ проверить, сколько указателей указывают на определённую область памяти? C++
C++ Есть ли способ, зная ссылку на класс, использовать его значения без запроса по ссылке?
Есть ли способ доступа к элементу списка по индексу? C++

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

Или воспользуйтесь поиском по форуму:
0x10
2425 / 1597 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
28.06.2014, 06:19     Есть лёгкий способ отсортировать? #16
Цитата Сообщение от Kukurudza Посмотреть сообщение
хотя этот вариант принципиально особо ничем не отличается
Разница в том, что сам контейнер map - немножко не для сортировки. Красно-черное дерево - самобалансирующаяся структура для поиска. Т.е. варианты типа сложить все элементы, чтобы потом перекинуть в линейную структуру - просто использование не по назначению. А если говорить более формально, то с использованием мапы получаем аллокации на каждый элемент, ребалансировку при вставке. Деревья, конено же, можно использовать для сортировки, но в конкретно данном случае повода не вижу.
Yandex
Объявления
28.06.2014, 06:19     Есть лёгкий способ отсортировать?
Ответ Создать тему
Опции темы

Текущее время: 06:05. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru