2015-05-25 5 views
-1

Предположим, мне дали два массива. Для ex-процесса с их временем прибытия и временем окончания. Я хочу, чтобы отсортировать его на основе времени окончания. На основе Finish Time, время прибытия также необходимо отсортировать. Я могу использовать сортировку или сортировку пузырьков для этой цели. Но Есть ли какой-либо STL для этой цели? Могу ли я использовать функцию sort() с некоторыми изменениями?Сортировка двух массивов

+0

Вы хотите использовать стабильная сортировка: http://en.wikipedia.org/wiki/Sorting_algorithm#Stability. Также покажите код или, по крайней мере, псевдокод. – Drakes

+0

возможно дубликат. http://stackoverflow.com/questions/3909272/sorting-two-corresponding-arrays. –

ответ

0

Один из способов сделать это было бы создать вектор (конец, начало) пар (в этом порядке - объяснение ниже), разбирайтесь, а затем разделить пары отсортированного выхода:

#include <utility> // For pair 
#include <algorithm> // For sort 

std::vector<std::pair<size_t, size_t>> intervals; 
for(size_t i = 0; i < start.size(); ++i) 
    intervals.push_back(std::make_pair(end[i], start[i])); 

std::sort(std::begin(intervals), std::end(intervals)); // (*) 

start.clear(); 
end.clear(); 
for(size_t i = 0; i < start.size(); ++i) 
{ 
    end[i] = intervals[i].first; 
    start[i] = intervals[i].second; 
} 

Обратите внимание на строку с комментарием (*). STL pairs' order is lexicographic, которые мы используем здесь (сортировка пар будет сортироваться по first s бесплатно).

+0

Спасибо, @ Jarod42! исправленный. –

0

Вы можете передать функтор в std::sort или предоставить operator < для данных:

struct MyClass 
{ 
    std::size_t arrivalTime; 
    std::size_t finishTime; 
}; 

std::vector<MyClass> myClasses = //.. 
std::sort(myClasses .begin(), myClasses.end(), 
      [](const MyClass& lhs, const MyClass& rhs) { 
       return std::tie(lhs.finishTime, lhs.arrivalTime) 
        < std::tie(rhs.finishTime, rhs.arrivalTime); 
     }); 

или просто

bool operator< (const MyClass& lhs, const MyClass& rhs) 
{ 
    return std::tie(lhs.finishTime, lhs.arrivalTime) 
      < std::tie(rhs.finishTime, rhs.arrivalTime); 
} 

и позже:

std::sort(myClasses .begin(), myClasses.end()); 
Смежные вопросы