CUtlMap
Jump to navigation
Jump to search
CUtlMap is Source's equivalent of the C++ Map type. A map is essentially a CUtlVector where each element, or member,
is mapped to a specific, unique key value that can be assigned when the member is added to the map. The code can be found in public/tier1/utlmap.h.
Using CUtlMap
// Initialize map for given type
CUtlMap<int, CBaseEntity*> mapList;
// (Populate map here)
CBaseEntity* pOther;
mapList.Insert(pOther->entindex(), pOther);
// Access map
// Note: Element(..) is given type IndexType_t, not KeyType_t. See Accessing section
// Find index of given key
int idx = mapList.Find(pOther->entindex());
//Ensure that it is a valid index
if (mapList.IsValidIndex(idx))
{
entindex = mapList.Element(idx)->entindex();
}
Count()- The total number of items in the map.
IsValidIndex( int i )- Checks if a node is valid and in the map.
InvalidIndex( )- Returns an invalid index.
EnsureCapacity( int num )- Makes sure we have enough memory allocated to store a requested number of elements.
MaxElement()- Max "size" of the vector
Adding elements
Insert( const KeyType_t &key, const ElemType_t &insert )- Inserts the element and key into the tail of the map.
InsertOrReplace( ( const KeyType_t &key, const ElemType_t &insert )- Inserts the element and key into the tail of the map, replacing the element if the key is the same as one that already exists
Reinsert( const KeyType_t &key, IndexType_t i )- If you change the search key, this can be used to reinsert the element into the map.
SetDefLessFunc(exampleCUtlMap).Accessing Elements
You can use array-style or use a method for index access:
Element( IndexType_t i )operator[]( IndexType_t i )- Returns the element at index i
Key( IndexType_t i )- Returns the key at index i
Find( const KeyType_t &key )- Returns the index at the given key
CUtlMap's accessor functions do not find a specific element by key, but rather, by index. Removing elements
You can remove elements at a given index, a given key, or all at once.
Single:
RemoveAt( IndexType_t i )- Removes the element at index i
Remove( const KeyType %key )- Removes the element mapped to the given key
All:
RemoveAll( )Purge( )PurgeAndDeleteElements( )- Purges the list and calls delete on each element in it.
Iteration
FirstInorder()NextInorder( IndexType_t i )PrevInorder( IndexType_t i )LastInorder()
Other functions
You can get the tree which the CUtlMap consists of using
AccessTree()- Returns a
CTree
You can swap one CUtlMap for another with
Swap( CUtlMap< K, T, I > &that )- Self explanatory