Re: Однообразность в STL
От: Кодт Россия  
Дата: 25.08.04 12:40
Оценка:
Здравствуйте, _nn_, Вы писали:

<>

std::sort это — изначально — разновидность быстрой сортировки контейнеров с произвольным доступом (массивы, std::vector).
std::list::sort использует алгоритм сортировки двухсвязных списков.
std::set/map/multiset/multimap вообще сортировать нельзя.

Для контейнеров с медленным произвольным доступом (по forward iterator'у) можно написать разновидность быстрой сортировки. Но вроде бы ни в одной версии STL этого не сделали.

В принципе, можно сделать функцию-диспетчера, которая различала бы тип контейнера и выполняла ту или иную сортировку.
template<class V, class A, class P>
void sort_container(std::vector<V,A>& cont, P pred)
{
  std::sort(cont.begin(), cont.end(), pred);
}

template<class V, class A, class P>
void sort_container(std::list<V,A>& cont, P pred)
{
  cont.sort(pred);
}

template<class C>
void sort_container(C& cont)
{
  sort_container(cont, std::less<typename C::value_type>());
}
Перекуём баги на фичи!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.