Search code examples
c++arraysstlassert

one line assert to test if STL container is sorted


Is there a way to write a one line condition that would return true if STL container is sorted? The container in question is std::vector

I intend to use it in an assert


Solution

  • Use adjacent_find in combination with less or greater functor.

    Restriction:
    You should know whether the container is sorted in ascending or descending.

    If the vector is supposed to be sorted in ascending order:

    //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;
    }