one line assert to test if STL container is sorted

后端 未结 3 1564
自闭症患者
自闭症患者 2021-02-05 16:22

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<

相关标签:
3条回答
  • 2021-02-05 16:56

    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;
    }
    
    0 讨论(0)
  • 2021-02-05 17:05

    You can use std::is_sorted(vec.begin(),vec.end()) to test if it is sorted. Note, though, that this is O(n).

    0 讨论(0)
  • 2021-02-05 17:09

    It depends what STL data type you want to use.

    A map is already sorted by the key provided the key has overloaded compare operators. You're good to go here.

    A list requires that you explicitly call the sort function. You will need to keep track of whether or not you sorted it yet.

    Hope this helps.

    0 讨论(0)
提交回复
热议问题