383 / 281 / 31
Регистрация: 04.09.2009
Сообщений: 1,225
1

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

27.06.2014, 19:42. Показов 1337. Ответов 15
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Вобщем есть 3 вектора одинаковой размерности. Нужно отсортировать первый вектор, а остальные два точно также, то есть если в первом векторе 5 элемент после сортировки стал вторым, то также должны поступить и остальные два вектора. |
Есть идеи как это сделать без особых заморочек?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.06.2014, 19:42
Ответы с готовыми решениями:

Есть ли способ просмотреть код библиотечных функций?
Жутко хочется посмотреть, как устроена, скажем, функция gotoxy из conio.h. Но в заголовочном файле...

Есть ли способ доступа к элементу списка по индексу?
Есть ли способ доступа к элементу списка по индексу?

Есть ли более удобный способ перевода переменную в строку?
Всем привет, начнем: Есть переменная(которая может быть и переменной и строкой): int fps = 150;...

Есть ли способ получить доступ к MS Office color picker
Вопрос программера на VBA программерам на С++. Есть ли способ получить доступ к Офисному компоненту...

15
Модератор
Эксперт С++
13502 / 10754 / 6409
Регистрация: 18.12.2011
Сообщений: 28,698
27.06.2014, 19:51 2
1 способ.При перестановки элементов основного массива переставляйте элементы второго и третьего.
2 способ.Заведите дополнительный массив, в который записывайте номер элемента,
который оказался на переставленном месте. Т.е. в начале в нем числа 0,1,2....,
если меняете 1 со 2 получаете 0,2,1,3... и т.д. Тогда после сортировки будет известно,
какой элемент поставить на какое место.
1
383 / 281 / 31
Регистрация: 04.09.2009
Сообщений: 1,225
27.06.2014, 20:02  [ТС] 3
zss, спасибо, но это с заморочками то есть нужно свой алгоритм сортировки писать, мне бы вот средствами STL
0
3257 / 2059 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
27.06.2014, 20:05 4
gromo, тупой и не очень эффективный способ - свалить все векторы в один вектор структур из трех полей, отсортировать по первому полю, результат обратно распределить по векторам.
0
383 / 281 / 31
Регистрация: 04.09.2009
Сообщений: 1,225
27.06.2014, 20:10  [ТС] 5
0x10, а можно подробнее, что-то не пойму, вектор каких структур?
0
3257 / 2059 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
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
1
383 / 281 / 31
Регистрация: 04.09.2009
Сообщений: 1,225
27.06.2014, 20:36  [ТС] 7
0x10, Ого, вот это я понимаю жесткий способ отсортировать
В моем случае вектор будет от силы на 20 элементов, может для такого и правда дешевле будет написать/содрать какую-нибудь примитивную сортировку и просто проранжировать одновременно 3 массива, как сказал zss ?

Да и лучше emplace_back() использовать в 15 строке, не так ли? Но идея оригинальная ничего не скажешь
0
106 / 87 / 13
Регистрация: 29.08.2012
Сообщений: 539
27.06.2014, 20:41 8
академическая задачка? баблсорт сделайте, если да.
0
383 / 281 / 31
Регистрация: 04.09.2009
Сообщений: 1,225
27.06.2014, 20:44  [ТС] 9
академическая задачка? баблсорт сделайте, если да.
Нет, не академическая, и как раз поэтому я всё больше склоняюсь к пузырьковой))
0
3257 / 2059 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
27.06.2014, 20:45 10
Цитата Сообщение от gromo Посмотреть сообщение
Да и лучше emplace_back() использовать в 15 строке, не так ли?
emplace, предварительно еще reserve на это безобразие. Я ж на автомате накатал.
Цитата Сообщение от gromo Посмотреть сообщение
Но идея оригинальная ничего не скажешь
Да то же самое, что zss предлагал вторым способом, только вместо одного массива индексов хранится N массивов копий объектов, что, понятно, затратно по памяти.
Цитата Сообщение от gromo Посмотреть сообщение
В моем случае вектор будет от силы на 20 элементов, может для такого и правда дешевле будет написать/содрать какую-нибудь примитивную сортировку и просто проранжировать одновременно 3 массива
Как удобнее. Мне было бы влом писать свой алгоритм, и успокоился бы на сортировке вектора пар, где первый элемент пары - объект из массива, второй - его индекс в неотсортированном массиве.
1
106 / 87 / 13
Регистрация: 29.08.2012
Сообщений: 539
27.06.2014, 20:47 11
а мапу если поюзать?
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
27.06.2014, 20:48 12
Цитата Сообщение от gromo Посмотреть сообщение
лёгкий способ отсортировать
От Аллена Карра
0
383 / 281 / 31
Регистрация: 04.09.2009
Сообщений: 1,225
27.06.2014, 21:13  [ТС] 13
Цитата Сообщение от Kukurudza Посмотреть сообщение
а мапу если поюзать?
и каким образом?
0
106 / 87 / 13
Регистрация: 29.08.2012
Сообщений: 539
27.06.2014, 21:17 14
ключи - элементы первого массива, значения- пары соответствующих указателей на элементы из 2 и 3 массивов. хотя этот вариант принципиально особо ничем не отличается от выше описанных.

Добавлено через 1 минуту
вообще, если возникла задача соответствия, может архитектура построена немного неправильно?
0
383 / 281 / 31
Регистрация: 04.09.2009
Сообщений: 1,225
27.06.2014, 21:19  [ТС] 15
Цитата Сообщение от Kukurudza Посмотреть сообщение
если возникла задача соответсвия, может немного архитектура построена немного неправильно?
Возможно и так, буду смотерть.
P.s. Всем большое спасибо за помощь
0
3257 / 2059 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
28.06.2014, 06:19 16
Цитата Сообщение от Kukurudza Посмотреть сообщение
хотя этот вариант принципиально особо ничем не отличается
Разница в том, что сам контейнер map - немножко не для сортировки. Красно-черное дерево - самобалансирующаяся структура для поиска. Т.е. варианты типа сложить все элементы, чтобы потом перекинуть в линейную структуру - просто использование не по назначению. А если говорить более формально, то с использованием мапы получаем аллокации на каждый элемент, ребалансировку при вставке. Деревья, конено же, можно использовать для сортировки, но в конкретно данном случае повода не вижу.
0
28.06.2014, 06:19
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.06.2014, 06:19
Помогаю со студенческими работами здесь

Есть ли более правильный и элегантный способ реализации функции?
Доброе время форумчане! bool db::CreateSQLTable() { QSqlQuery a; QString str =...

Замена двух строк в огромном файле. Есть ли оптимальный способ?
Есть задача, поменять в огромном текстовом файле (несколько Гб) 2 произвольные строки. Написал 2 ...

Есть ли способ проверить, сколько указателей указывают на определённую область памяти?
Привет народ. Такой вопрос: Есть ли способ проверить, сколько указателей указывают на определённую...

Анализ данных с COM порта. Есть ли способ чтения файла в процессе его изменения?
Здравствуйте форумчане, передо мной стала задача, которую я никак не могу осилить, а именно анализ...


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

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

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