Одна строка утверждает, чтобы проверить, сортируется ли контейнер 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 вы хотите использовать.
Карта уже сортируется по ключу, если ключ перегружен операторами сравнения. Вы хорошо пойдете сюда.
В списке требуется, чтобы вы явно вызывали функцию сортировки. Вам нужно будет отслеживать, все еще вы его отсортировали.
Надеюсь, что это поможет.