Одна строка утверждает, чтобы проверить, сортируется ли контейнер STL

Есть ли способ написать условие одной строки, которое вернет true, если сортировка контейнера STL? Контейнер, о котором идет речь, составляет std::vector

Я намерен использовать его в файле assert

Ответы

Ответ 1

Используйте adjacent_find в сочетании с меньшим или большим функтором.

Ограничение:
Вы должны знать, сортируется ли контейнер по возрастанию или по убыванию.

Если vector предполагается сортировать в порядке возрастания:

//Checks the first element where adjacent value where elem > nextElem
//returns end if the vector is sorted!
//Complexity is O(n)
vector<int>::iterator pos =  std::adjacent_find (aVec.begin(), aVec.end(),   // range
                                     std::greater<int>());               


if (pos == aVec.end()) 
{
    std::cout<<" sorted"<<endl;
}
else
{
    std::cout<<"Not sorted"<<endl;
}

Ответ 2

Вы можете использовать std:: is_sorted (vec.begin(), vec.end()), чтобы проверить, отсортировано ли оно. Заметим, однако, что это O (n).

Ответ 3

Это зависит от того, какой тип данных STL вы хотите использовать.

Карта уже сортируется по ключу, если ключ перегружен операторами сравнения. Вы хорошо пойдете сюда.

В списке требуется, чтобы вы явно вызывали функцию сортировки. Вам нужно будет отслеживать, все еще вы его отсортировали.

Надеюсь, что это поможет.