Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.91/68: Рейтинг темы: голосов - 68, средняя оценка - 4.91
Делаю внезапно и красиво
Эксперт С++
 Аватар для Deviaphan
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744

Сортировка индексов алгоритмом std::sort

17.06.2011, 08:42. Показов 14409. Ответов 25
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть два массива одинаковой размерности. В одном хоть что, во втором целые числа (индексы элементов первого массива). Нужно выполнить сортировку второго массива по заданным полям первого массива.
Используя STL, разумеется.
Всё, что пока смог придумать, это сохранить в компаранде ссылку на первый массив, но терзают смутные сомнения, что есть более элегантное решение. Тем более, что при сортировке первого массива, второй сортировать не поучится таким способом (думаю забить и использовать два индексных массива).
Есть умные идеи?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
17.06.2011, 08:42
Ответы с готовыми решениями:

Сортировка массива c++ std :: sort()
Дан двумерный массив символов char M, надо отсортировать его при помощи std :: sort(), построчно, т.е. допустим было 00011 11111 ...

Std::sort сортировка вектора объектов
Добрый день. Пытаюсь выполнить сортировку вектора объектов с помощью функции сравнения #include "stdafx.h" #include...

Сортировка вектора через std::sort
Доброго времени суток, интересует сабж void Sort(list<int> &past) { sort(past.begin(), past.end()); } на такое выдает ...

25
 Аватар для taras atavin
4226 / 1799 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
16.03.2012, 09:04
Студворк — интернет-сервис помощи студентам
Сорт вроде просит функцию сравнения. Ну так и надо передать такую функцию сравнения, у которой больше тот индекс большего элемента.
0
Делаю внезапно и красиво
Эксперт С++
 Аватар для Deviaphan
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
16.03.2012, 09:05  [ТС]
Цитата Сообщение от Luke Посмотреть сообщение
при любой перестановке в индексе. на выходе будут соответсвующие новым позициям данный взятые из масс.
Совершенно верно. Только вот перестановки в index выполняются в соответствии со значениями в mass, а не хоть как.

Добавлено через 1 минуту
Цитата Сообщение от taras atavin Посмотреть сообщение
ну так и надо передать функцию, сравнивающую элементы.
Цитата Сообщение от Deviaphan Посмотреть сообщение
Всё, что пока смог придумать, это сохранить в компаранде ссылку на первый массив
Но, увы...
Цитата Сообщение от Deviaphan Посмотреть сообщение
но терзают смутные сомнения, что есть более элегантное решение
0
40 / 40 / 7
Регистрация: 21.02.2012
Сообщений: 95
16.03.2012, 09:17
Deviaphan, итого получаем - индекс должен быть отсортирован по масс, значения из масс беруться по индекс. вопрос. масс не трогаем? его нельзя сортировать?

если масс будет содержать объекты, то использовать их как индексы для индекс будет возможно не иначе как через хеш функцию. что то странная задача. видать намудрили с архитектурой построив лишние зависимости.

давай еще детализируй.

уже большая часть понятна. осталась "самая малость" по какому принципу будет сортироваться индекс?
0
Эксперт С++
 Аватар для fasked
5045 / 2624 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 5
16.03.2012, 09:23
Цитата Сообщение от Deviaphan Посмотреть сообщение
есть более элегантное решение
Более элегантно это с лямбдой, но как я понимаю нужен С++03, попозже еще подумаю, как это сделать, пока тоже ничего не вижу, кроме сохранения в компараторе.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <algorithm>
#include <iostream>
#include <iterator>
#include <vector>
 
int main()
{
   std::vector<int> idx = { 0, 1, 2, 3, 4 };
   std::vector<int> val = { 5, 1, 2, 8, 4 };
   
   std::sort(std::begin(idx), std::end(idx), 
      [val] (int a, int b) 
      {
         return val[a] < val[b];
      }
   );
   
   std::copy(std::begin(idx), std::end(idx), std::ostream_iterator<int>(std::cout, " "));
   std::cout << std::endl;
}
2
40 / 40 / 7
Регистрация: 21.02.2012
Сообщений: 95
16.03.2012, 09:32
Цитата Сообщение от fasked Посмотреть сообщение
с лямбдой
ну если не лямбда то придется просто написать соответствующий функтор да и все.

элегантное решение. можно закрыть думаю тему. много вопросов было от непонимания постановки задачи
0
Делаю внезапно и красиво
Эксперт С++
 Аватар для Deviaphan
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
16.03.2012, 10:37  [ТС]
Цитата Сообщение от Luke Посмотреть сообщение
использовать их как индексы для индекс будет возможно не иначе как через хеш функцию
В начальной постановке нужно было искать объект по одному из двух полей.Поэтому я хотел отсортировать их по одному полю (для поиска по нему) и сделать массив индексов для поиска по второму полю. Отсюда возникла задача с одновременной сортировкой двух массивов. Однако, с увеличением сложности объекта и ростом количества полей, по которым его нужно было искать стало очевидно второе решение, с неизменным массивом объектов и сортировкой только массивов индексов. Сперва пугали накладные расходы, но это всего лишь десятки мегабайт, поэтому это решение и было выбрано как лучшее.


Цитата Сообщение от fasked Посмотреть сообщение
с лямбдой
Элегантнее, да. Спасибо.)
Но мне нужна поддержка 2005,2008,2010 студий.(
Оставлю компаранд, уж скоро год, как с ним всё работает... Но хочется няшнее.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
16.03.2012, 10:37

Сортировка std::list с функцией sort()
У меня задание написать Отсортировать числовую последовательность в порядке возрастания количества делителей её элементов, используя...

Сортировка списка с использованием std::sort
Что-то не получается отсортировать целочисленные данные расположенные в списке, компилятор (VS10) жутко ругается. В чем может быть дело? ...

Сортировка массива структур по выбранному полю с помощью алгоритма std::sort
Не знаю, как правильно передать функцию сравнения в std::sort. Кроме того в моей структуре есть поля одного типа, мне кажется будет...

Почему стандартная сортировка вектора std::sort намного быстрее сортировки вставками/пузырьком?
Здравствуйте, объясните, пожалуйста, как реализована std::sort. Ясно, что через итераторы, но почему такой сильный выигрыш во времени (1.4...

Отличие std::sort От std::qsort
Пишу доклад по программированию, собственно выбрал тему сортировок. вот сейчас хочу расписать отлчиие + и - двух сортировок. но инфу...


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

Или воспользуйтесь поиском по форуму:
26
Ответ Создать тему
Новые блоги и статьи
Часы с термометром и праздничным календарем
yariko 12.11.2026
Сегодня мы рассмотрим как можно сделать отличные многофункциональные часы. Итак, поставим конкретную задачу: разработать часы с календарем, двумя термодатчиками, выводом поздравительных сообщений. . .
Транслитерация текста с кириллицы на латиницу (вариант №1)
Maks 11.11.2026
Решил облегчить жизнь себе и коллегам админам при создании электронных почтовых ящиков для пользователей, в результате написал обработку "Транслитерация текста" с кириллицы на латиницу, а в ней. . .
Книги по геймдизайну, левел-дизайну, игровым механикам и проектированию игрового опыта
8Observer8 08.11.2026
Содержание блога | English Version 1. 2003 - 06 - Designing Virtual Worlds (1st Edition) Автор: Richard A. Bartle | Объем: 768 стр. Ссылки: Amazon . . .
Родители токсичные абьюзеры по отношению к своим детям ругают их оскорбляют не любят
zorxor 08.11.2026
Жить в атмосфере постоянных оскорблений, критики и холодности со стороны родителей — это тяжелое и болезненное испытание, которое оставляет глубокие эмоциональные раны. Токсичное и абьюзивное. . .
Как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Ответ от Джемени ИИ.
zorxor 08.11.2026
Джемени, как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Многие люди, возвращаясь домой, сразу переодеваются в максимально свободную одежду или вовсе предпочитают. . .
Паттерн очереди действий/команд (Action / Command Queue). Система очереди действий и кат-сцен с SDL3 Callbacks, cglm и OpenGL
8Observer8 07.11.2026
Содержание блога | English Version Руководство для начинающих по реализации паттерна очереди действий/ команд (Action / Command Queue) на C++ (C++20) с использованием официального SDL3 Callbacks. . .
Проверка полного ФИО в типовом справочнике
Maks 07.11.2026
Решение реализовано в конфигурации КА2, на примере справочника "КонтактныеЛицаПартнеров". Задача: Запрет инициалов. Не допускаеть использование сокращений вида "И. И. ", "И. И. ", "И И" и. . .
Про "Windows must die!"
kumehtar 04.11.2026
Знаете, чет накатило. . . . Когда-то это было почти боевым кличем: мол, нормальный человек сидит на DOS, OS/ 2 или Linux, а вот это вот - Must Die. А теперь человек произносит «мастдай» с усмешкой - и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru