繁体   English   中英

c ++ stl unordered_map如何打印其所有值?

[英]How does c++ stl unordered_map print all its values?

我正在使用c ++ stl unordered_map库解决一些leetcode问题。 我可以使用find函数和[]运算符重载来访问我的元素。 但是我已经看到了一些使用for循环遍历哈希图所有元素的答案。 根据我的理解,哈希映射的内部结构通常是一个向量,并且该向量将永远不会被充分利用(这意味着将有很多空插槽,由于没有太多的冲突,所以常数O不变)。 但是从答案中我看到人们正在遍历向量,但是他们没有打印这些空索引,因为我看不到任何垃圾值。 我不知道这怎么可能。 这是我所看到的代码。

vector<vector<string>> groupAnagrams(vector<string>& strs) {
        unordered_map<string, vector<string>> mp;
        for (string s : strs) {
            mp[t].push_back(s);
        }
        vector<vector<string>> anagrams;
        for (auto p : mp) {  //this is the part I don't understand
            anagrams.push_back(p.second);
        }
        return anagrams;
    } 

我希望对哈希图数据结构的基础向量的每个元素进行迭代以具有垃圾值,因为并非所有成员都填充在向量中,但是结果不包括这些值,而仅给出正确的输出。 我不明白

从您的问题来看,似乎您可能认为STL容器的迭代器直接在基础数据结构上进行迭代。 事实并非如此。 迭代器本身可以包含字段和逻辑,以使其能够以逻辑方式进行迭代。

标准库没有规定算法的实现,但是所有通用库都可以支持迭代而无需遍历空元素:

  1. 您所写的封闭表实现(STL的实现在实践中并未使用该实现)具有一组条目,每个条目是否被采用。 每个条目可以通过具有成对的数组(一个用于值,一个用于布尔值)或使用两个数组来标记为已采用。 无论如何,在进行迭代时,迭代器只会在增量时跳过所有未使用的条目。

  2. 一个更常见的实现是一系列链接列表。 在这里,迭代器既包含数组内的位置,又包含列表的链接。 递增时,它将尝试移动到下一个链接。 如果不存在,它将移至下一个非空列表。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM