Skip to content
MapValueCountForKey

MapValueCountForKey

Description

Count how many values are stored for a key.

Parameters

Name Direction Description
m in Map.
lookup_key in Key to search for.

Success

Returns the number of entries mapping lookup_key to any value. The map is not modified.

Failure

Returns 0 when no entry exists for the key. The map is not modified.

Usage example (Cross-references)

Usage examples (Cross-references)
        result       = result && MapContainsKey(&map, "alpha");
        result       = result && !MapContainsKey(&map, key);
        result       = result && (MapValueCountForKey(&map, "alpha") == 2);
        stored_value = MapGetFirstPtr(&map, "alpha");
        result       = result && stored_value && (*stored_value != value) && (ZstrCompare(*stored_value, "first") == 0);
                      (MapPolicy(&map).next_capacity == MapPolicyQuadratic.next_capacity) &&
                      (MapPolicy(&map).should_rehash == MapPolicyQuadratic.should_rehash);
        result = result && (MapValueCountForKey(&map, "red") == 2);
        result = result && MapGetFirstPtr(&map, "red") && (ZstrCompare(*MapGetFirstPtr(&map, "red"), "apple") == 0);
        result = result && MapGetFirstPtr(&map, "yellow") && (ZstrCompare(*MapGetFirstPtr(&map, "yellow"), "banana") == 0);
        result = result && MapContainsPair(&map, 2, 21);
        result = result && MapContainsPair(&map, 3, 30);
        result = result && (MapValueCountForKey(&map, 2) == 2);
        result = result && (MapPairCount(&map) == 3);
        result = result && (MapUniqueKeyCount(&map) == 2);
        int *v      = MapGetFirstPtr(&map, 0);
        bool result = v && (*v == 999);
        result      = result && (MapValueCountForKey(&map, 0) == 1);
    
        MapDeinit(&map);
    
        MapSetOnlyR(&map, 7, 70);
        result = result && (MapPairCount(&map) == 1) && (MapValueCountForKey(&map, 7) == 1);
        result = result && MapGetFirstPtr(&map, 7) && (*MapGetFirstPtr(&map, 7) == 70);
    
        bool result = MapPairCount(&map) == 4;
        result      = result && (MapValueCountForKey(&map, 1) == 2);
        result      = result && (MapValueCountForKey(&map, 2) == 1);
        result      = result && (MapValueCountForKey(&map, 3) == 1);
        bool result = MapPairCount(&map) == 4;
        result      = result && (MapValueCountForKey(&map, 1) == 2);
        result      = result && (MapValueCountForKey(&map, 2) == 1);
        result      = result && (MapValueCountForKey(&map, 3) == 1);
        result      = result && MapGetFirstPtr(&map, 1) && (*MapGetFirstPtr(&map, 1) == 10);
        result      = result && (MapValueCountForKey(&map, 1) == 2);
        result      = result && (MapValueCountForKey(&map, 2) == 1);
        result      = result && (MapValueCountForKey(&map, 3) == 1);
        result      = result && MapGetFirstPtr(&map, 1) && (*MapGetFirstPtr(&map, 1) == 10);
        result      = result && MapGetFirstPtr(&map, 2) && (*MapGetFirstPtr(&map, 2) == 200);
    
        bool result = (MapPairCount(&map) == 3);
        result      = result && (MapValueCountForKey(&map, 1) == 3);
        result      = result && MapGetFirstPtr(&map, 1) && (*MapGetFirstPtr(&map, 1) == 100);
        result      = result && MapContainsPair(&map, 1, 11);
        result = result && !MapSetFirstR(&map, 7, 70);
        result = result && !MapContainsKey(&map, 7);
        result = result && (MapValueCountForKey(&map, 7) == 0);
        result = result && (MapPairCount(&map) == 1);
        // Pre-existing entry is untouched.
        MapInsertR(&map, 5, 51);
        MapInsertR(&map, 5, 52);
        bool result = (MapValueCountForKey(&map, 5) == 3);
    
        MapSetOnlyR(&map, 5, 500);
        MapSetOnlyR(&map, 5, 500);
    
        result = result && (MapValueCountForKey(&map, 5) == 1);
        result = result && MapGetFirstPtr(&map, 5) && (*MapGetFirstPtr(&map, 5) == 500);
        result = result && MapContainsPair(&map, 5, 500);
    
        bool result = (key == 0) && (value == 0);
        result      = result && (MapValueCountForKey(&map, 42) == 1);
        result      = result && MapGetFirstPtr(&map, 42) && (*MapGetFirstPtr(&map, 42) == 84);
    
        bool result = (key == 42) && (value == 84);
        result      = result && (MapValueCountForKey(&map, 42) == 1);
        result      = result && MapGetFirstPtr(&map, 42) && (*MapGetFirstPtr(&map, 42) == 84);
    
        bool result = (key == 0) && (value == 0);
        result      = result && (MapValueCountForKey(&map, 11) == 1);
        result      = result && MapGetFirstPtr(&map, 11) && (*MapGetFirstPtr(&map, 11) == 110);
        bool result = MapSetFirstL(&map, 11, value);
        result      = result && (value == 0);
        result      = result && (MapValueCountForKey(&map, 11) == 1);
        result      = result && MapGetFirstPtr(&map, 11) && (*MapGetFirstPtr(&map, 11) == 110);
        result    = value_ptr && (*value_ptr == 80);
        result    = result && (MapPairCount(&map) == 1);
        result    = result && (MapValueCountForKey(&map, 8) == 1);
    
        value_ptr = MapEnsurePtr(&map, 8, 800);
        result    = result && value_ptr && (*value_ptr == 80);
        result    = result && (MapPairCount(&map) == 1);
        result    = result && (MapValueCountForKey(&map, 8) == 1);
    
        MapDeinit(&map);
        result         = result && refetched && (*refetched == 333);
        // Mutation must not have spawned a second entry.
        result = result && (MapValueCountForKey(&map, 3) == 1);
        result = result && (MapPairCount(&map) == 1);
        MapInsert(&map, k1, v1);
        bool result = (k1 == 0) && (v1 == 0);
        result      = result && (MapValueCountForKey(&map, 1) == 1);
    
        // MapSet aliases MapSetOnlyL: replace + zero both sources.
        // MapSet aliases MapSetOnlyL: replace + zero both sources.
        MapInsertR(&map, 1, 99); // give key 1 a second value
        result = result && (MapValueCountForKey(&map, 1) == 2);
        int k2 = 1;
        MapSet(&map, k2, v2);
        MapSet(&map, k2, v2);
        result = result && (k2 == 0) && (v2 == 0);
        result = result && (MapValueCountForKey(&map, 1) == 1);
        result = result && MapGetFirstPtr(&map, 1) && (*MapGetFirstPtr(&map, 1) == 11);
        MapMustInsertL(&map, k, v); // L-form zeroes sources
        bool result = (k == 0) && (v == 0);
        result      = result && (MapValueCountForKey(&map, 1) == 1);
    
        MapMustInsertR(&map, 2, 20);
    
        MapMustInsertR(&map, 2, 20);
        result = result && (MapValueCountForKey(&map, 2) == 1);
    
        int ik = 3;
        MapMustInsert(&map, ik, iv); // aliases L-form: zeroes both sources
        result = result && (ik == 0) && (iv == 0);
        result = result && (MapValueCountForKey(&map, 3) == 1);
    
        // SetFirstR updates the existing first value of key 2 (insert was 20).
    
        MapMustSetOnlyR(&map, 4, 40);
        result = result && (MapValueCountForKey(&map, 4) == 1);
        result = result && MapGetFirstPtr(&map, 4) && (*MapGetFirstPtr(&map, 4) == 40);
        MapMustSetOnlyL(&map, sk, so); // replace + zero both sources
        result = result && (sk == 0) && (so == 0);
        result = result && (MapValueCountForKey(&map, 4) == 1);
        result = result && MapGetFirstPtr(&map, 4) && (*MapGetFirstPtr(&map, 4) == 50);
        MapMustSet(&map, msk, msv); // aliases SetOnlyL: zeroes both sources
        result = result && (msk == 0) && (msv == 0);
        result = result && (MapValueCountForKey(&map, 5) == 1);
        result = result && MapGetFirstPtr(&map, 5) && (*MapGetFirstPtr(&map, 5) == 55);
        result = result && (MapTombstones(&map) == 0);
        result = result && (MapPairCount(&map) == 1);
        result = result && (MapValueCountForKey(&map, 7) == 1);
        result = result && MapGetFirstPtr(&map, 7) && (*MapGetFirstPtr(&map, 7) == 700);
        bool result = MapRemoveFirst(&map, 1);
        result      = result && MapContainsKey(&map, 1);
        result      = result && (MapValueCountForKey(&map, 1) == 1);
        result      = result && MapGetFirstPtr(&map, 1) && (*MapGetFirstPtr(&map, 1) == 11);
        result      = result && (MapPairCount(&map) == 2);
        result      = result && !MapContainsPair(&map, 5, 51);
        result      = result && MapContainsPair(&map, 5, 52);
        result      = result && (MapValueCountForKey(&map, 5) == 2);
    
        MapDeinit(&map);
        bool result = (MapRemoveIf(&map, remove_even_values, NULL) == 2);
        result      = result && !MapContainsKey(&map, 2);
        result      = result && (MapValueCountForKey(&map, 1) == 1);
        result      = result && MapGetFirstPtr(&map, 1) && (*MapGetFirstPtr(&map, 1) == 11);
        result      = result && MapContainsKey(&map, 3);
        bool result = (MapRemoveAll(&map, 5) == 3);
        result      = result && !MapContainsKey(&map, 5);
        result      = result && (MapValueCountForKey(&map, 5) == 0);
        result      = result && MapContainsKey(&map, 9);
        result      = result && (MapPairCount(&map) == 1);
        MapInsertR(&map, 0, 7777);
    
        bool result = (MapValueCountForKey(&map, 0) == 2);
    
        MapDeinit(&map);
        result      = result && MapContainsPair(&map, 7, 71);
        result      = result && !MapContainsPair(&map, 7, 72);
        result      = result && (MapValueCountForKey(&map, 7) == 2);
        result      = result && (MapValueCountForKey(&map, 9) == 1);
        result      = result && (MapValueCountForKey(&map, 8) == 0);
        result      = result && !MapContainsPair(&map, 7, 72);
        result      = result && (MapValueCountForKey(&map, 7) == 2);
        result      = result && (MapValueCountForKey(&map, 9) == 1);
        result      = result && (MapValueCountForKey(&map, 8) == 0);
        result      = result && (MapUniqueKeyCount(&map) == 2);
        result      = result && (MapValueCountForKey(&map, 7) == 2);
        result      = result && (MapValueCountForKey(&map, 9) == 1);
        result      = result && (MapValueCountForKey(&map, 8) == 0);
        result      = result && (MapUniqueKeyCount(&map) == 2);
        result      = result && !MapContainsKey(&map, 7);            // map_contains early-out
        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);
    
        bool result = (MapValuePtrFromCursor(&map, cursor) == NULL);
        result      = result && (MapValueCountForKey(&map, 5) == 1);
        result      = result && MapGetFirstPtr(&map, 5) && (*MapGetFirstPtr(&map, 5) == 51);
            int *v = MapGetFirstPtr(&map, k);
            result = result && v && (*v == k * 100 + 7);
            result = result && MapContainsKey(&map, k) && (MapValueCountForKey(&map, k) == 1);
        }
        // A key that collides into the chain but was never inserted is absent.
        // per-bucket.
        MapInsertR(&map, 3, 999);
        result = result && (MapValueCountForKey(&map, 3) == 2);
        result = result && (MapValueCountForKey(&map, 4) == 1);
        result = result && MapContainsPair(&map, 3, 307) && MapContainsPair(&map, 3, 999);
        MapInsertR(&map, 3, 999);
        result = result && (MapValueCountForKey(&map, 3) == 2);
        result = result && (MapValueCountForKey(&map, 4) == 1);
        result = result && MapContainsPair(&map, 3, 307) && MapContainsPair(&map, 3, 999);
        result = result && !MapContainsPair(&map, 4, 999);
            int *v = MapGetFirstPtr(&map, k);
            result = result && v && (*v == k * 100 + 7);
            result = result && MapContainsKey(&map, k) && (MapValueCountForKey(&map, k) == 1);
        }
        // A key that collides into the chain but was never inserted is absent.
            int *v = MapGetFirstPtr(&map, k);
            result = result && v && (*v == k * 100 + 7);
            result = result && MapContainsKey(&map, k) && (MapValueCountForKey(&map, k) == 1);
        }
Last updated on