簡體   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