CUtlSortVector
CUtlSortVector is a CUtlVector that automatically orders its elements using binary search. Code can be found in public/tier1/utlsortvector.h.
CUtlSortVector is not thread-safe under Linux.Initialization
A CUtlSortVector expects a type and a sorting class. Here is an example:
#include "UtlSortVector.h"
// Sorting class
class CEntityReportLess
{
public:
bool Less( const CBaseEntity &src1, const CBaseEntity &src2, void *pCtx )
{
return stricmp( src1->GetClassname(), src2->GetClassname() ) < 0;
}
};
CUtlSortVector<CBaseEntity*, CEntityReportLess> sortedList;
The CUtlSortVector will then use the Less method to determine the order of elements. Note how the function has a third argument for a sorting context (see below).
Adding elements
Only Insert( const T& src ) or InsertNoSort( const T& src ) is allowed when adding elements to a CUtlSortVector. InsertNoSort( const T& src ) just puts the element at the tail of the vector.
InsertNoSort, you are only allowed to use that particular index until sorting is redone, or you will get a fatal Assert!Sorting context
Using SetLessContext( void *pCtx ), you can set a sorting context that will be passed to the Less function.
Searching
CUtlSortVector uses binary searches to find elements, which are very fast.
Find( const T& src )- Searches through the CUtlVector and returns the element index, or -1 if the given object was not found.
FindLessOrEqual( const T& src )FindLess( const T& src )- As above, but also considers elements that rank lower than the given object.
Single elements
Remove( const T& search )- Searches for the element using
Find()and removes it from the vector. Remove( int i )- Removes the element at the specified index.
Re-sorting
With RedoSort( bool bForceSort = false ), the CUtlSortVector is resorted using QuickSort. Use bForceSort to sort regardless if it is necessary or not (it becomes necessary when you use the InsertNoSort method).