Skip to content
MapUniqueKeyCount

MapUniqueKeyCount

Description

Number of distinct keys stored in the multimap. Walks the slot table once to count canonical probe-anchor slots, so this is O(capacity) – prefer MapPairCount when total pair count is enough.

Parameters

Name Direction Description
m in Map.

Success

Returns the count of distinct keys present. The map is not modified.

Failure

Cannot fail. LOG_FATAL via ValidateMap(m) when m is uninitialised or corrupted.

Usage example (Cross-references)

Usage examples (Cross-references)
        result = result && MapContainsPair(&first, 2, 20);
        result = result && (MapPairCount(&first) == 2);
        result = result && (MapUniqueKeyCount(&first) == 2);
    
        MapSwap(&first, &second);
        result = result && !MapContainsKey(&map, 2);
        result = result && (MapPairCount(&map) == 2);
        result = result && (MapUniqueKeyCount(&map) == 2);
    
        MapDeinit(&map);
        result = result && (MapValueCountForKey(&map, 2) == 2);
        result = result && (MapPairCount(&map) == 3);
        result = result && (MapUniqueKeyCount(&map) == 2);
    
        MapDeinit(&map);
        result      = result && (MapValueCountForKey(&map, 9) == 1);
        result      = result && (MapValueCountForKey(&map, 8) == 0);
        result      = result && (MapUniqueKeyCount(&map) == 2);
    
        MapDeinit(&map);
        result      = result && !MapContainsPair(&map, 7, 0);        // map_contains_pair early-out
        result      = result && (MapValueCountForKey(&map, 7) == 0); // map_value_count early-out
        result      = result && (MapUniqueKeyCount(&map) == 0);
        result      = result && (MapPairCount(&map) == 0);
            MapInsertR(&map, k, k * 100 + 7);
    
        bool result = (MapPairCount(&map) == 8) && (MapUniqueKeyCount(&map) == 8);
        for (int k = 0; k < 8; k++) {
            int *v = MapGetFirstPtr(&map, k);
            MapInsertR(&map, k, k * 100 + 7);
    
        bool result = (MapPairCount(&map) == KEY_COUNT) && (MapUniqueKeyCount(&map) == KEY_COUNT);
    
        // Lookup: every inserted key must return ITS OWN value, not a neighbour's.
        // Count dropped by exactly one; the removed key is gone.
        result = result && (MapPairCount(&map) == (KEY_COUNT - 1));
        result = result && (MapUniqueKeyCount(&map) == (KEY_COUNT - 1));
        result = result && !MapContainsKey(&map, removed) && (MapGetFirstPtr(&map, removed) == NULL);
Last updated on