C ++ Сортировка параллельных векторов с диапазоном ZIP: насколько эффективно это на самом деле, и может ли ржавчина сделC++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 C ++ Сортировка параллельных векторов с диапазоном ZIP: насколько эффективно это на самом деле, и может ли ржавчина сдел

Сообщение Anonymous »

Я пытался решить проблему сортировки параллельных векторов (то есть векторов, которые содержат атрибут одного и того же объекта для каждого индекса). У меня есть несколько векторов, и мне нужно отсортировать их, используя один из значений этих векторов в качестве ключа. Общий способ сделать это в ржавчине состоит в том, чтобы распределить вектор кортежей, сортировать его по одному из его полей и расстегнуть его обратно в векторы. Слово, которое мне здесь не нравится, «распределять». Я просто хочу сортировать ссылочный вектор на месте, и для каждого подсасывания элемента выполнять один и тот же обмен во всех других векторах, не нужно что-либо выделять. Короче говоря, код выглядит следующим образом: < /p>

Код: Выделить всё

std::vector keys   { 1,   4,   3,   0,   2,   8,   6,   5,   7,   9 };
std::vector values   {'E', 'O', 'L', 'H', 'L', 'L', 'O', 'W', 'R', 'D'};
auto zip = std::ranges::views::zip(keys, values);
std::ranges::sort(zip, [](const auto & lhs, const auto & rhs) {
return std::get(lhs) < std::get(rhs);
});
Это сортирует значения Использование ключей в качестве ссылки.
В статье говорится, что с этим подходом «Временные векторы не созданы, объекты не являются (без необходимости) копированы» . Насколько я понимаю, этот код делает именно то, что я хочу. Я прав? И если бы я был, как бы я сделал это в ржавчине?

Подробнее здесь: https://stackoverflow.com/questions/795 ... y-is-and-c
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»