最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++?各種map特點對比分析

 更新時間:2025年03月22日 13:43:16   作者:越甲八千  
文章比較了C++中不同類型的map(如std::map,?std::unordered_map,?std::multimap,?std::unordered_multimap,?hash_map)的底層實現(xiàn)、元素順序、鍵的唯一性以及查找和插入刪除操作的效率,感興趣的朋友一起看看吧

特點比較

1. std::map

  • 底層實現(xiàn):基于紅黑樹(一種自平衡的二叉搜索樹)。
  • 元素順序:元素按照鍵(key)的升序排列。
  • 鍵的唯一性:每個鍵只能出現(xiàn)一次,插入重復鍵的元素會被忽略。
  • 查找效率:查找操作的時間復雜度為 O ( l o g n ) O(log n) O(logn),其中 n n n 是容器中元素的數(shù)量。
  • 插入和刪除效率:插入和刪除操作的時間復雜度也為 O ( l o g n ) O(log n) O(logn)

2. std::unordered_map

  • 底層實現(xiàn):基于哈希表。
  • 元素順序:元素沒有特定的順序,存儲位置由鍵的哈希值決定。
  • 鍵的唯一性:每個鍵只能出現(xiàn)一次,插入重復鍵的元素會覆蓋原有的元素。
  • 查找效率:平均情況下,查找操作的時間復雜度為 O ( 1 ) O(1) O(1),但在最壞情況下可能達到 O ( n ) O(n) O(n)。
  • 插入和刪除效率:平均情況下,插入和刪除操作的時間復雜度為 O ( 1 ) O(1) O(1)。

3. std::multimap

  • 底層實現(xiàn):同樣基于紅黑樹。
  • 元素順序:元素按照鍵的升序排列。
  • 鍵的唯一性:允許鍵重復,即可以有多個元素具有相同的鍵。
  • 查找效率:查找操作的時間復雜度為 O ( l o g n ) O(log n) O(logn)
  • 插入和刪除效率:插入和刪除操作的時間復雜度為 O ( l o g n ) O(log n) O(logn)。

4. std::unordered_multimap

  • 底層實現(xiàn):基于哈希表。
  • 元素順序:元素沒有特定的順序,由鍵的哈希值決定存儲位置。
  • 鍵的唯一性:允許鍵重復。
  • 查找效率:平均情況下,查找操作的時間復雜度為 O ( 1 ) O(1) O(1),最壞情況下為 O ( n ) O(n) O(n)。
  • 插入和刪除效率:平均情況下,插入和刪除操作的時間復雜度為 O ( 1 ) O(1) O(1)

5. hash_map(SGI STL 擴展)

  • 底層實現(xiàn):基于哈希表。
  • 元素順序:元素沒有特定的順序,由鍵的哈希值決定存儲位置。
  • 鍵的唯一性:每個鍵只能出現(xiàn)一次,插入重復鍵的元素會覆蓋原有的元素。
  • 查找效率:平均情況下,查找操作的時間復雜度為 O ( 1 ) O(1) O(1),最壞情況下為 O ( n ) O(n) O(n)。
  • 插入和刪除效率:平均情況下,插入和刪除操作的時間復雜度為 O ( 1 ) O(1) O(1)。
    在早期的 C++ 標準(如 C++98、C++03)中有 hash_map,不過它并非標準庫的一部分,而是來自于 SGI STL 擴展。在 C++11 及以后的標準中,hash_mapstd::unordered_map 替代,std::unordered_map 成為標準的哈希表實現(xiàn)。不過有些編譯器仍然支持 hash_map,下面為你加入 hash_map 并進行比較,同時給出相應的 C++ 示例代碼。

C++ 示例代碼

#include <iostream>
#include <map>
#include <unordered_map>
#include <ext/hash_map>  // 對于支持 hash_map 的編譯器
// 演示 std::map 的使用
void testStdMap() {
    std::map<int, std::string> myMap;
    myMap[1] = "apple";
    myMap[2] = "banana";
    myMap[1] = "cherry";  // 鍵 1 重復,會覆蓋原有的值
    std::cout << "std::map:" << std::endl;
    for (const auto& pair : myMap) {
        std::cout << pair.first << ": " << pair.second << std::endl;
    }
}
// 演示 std::unordered_map 的使用
void testUnorderedMap() {
    std::unordered_map<int, std::string> myUnorderedMap;
    myUnorderedMap[1] = "apple";
    myUnorderedMap[2] = "banana";
    myUnorderedMap[1] = "cherry";  // 鍵 1 重復,會覆蓋原有的值
    std::cout << "\nstd::unordered_map:" << std::endl;
    for (const auto& pair : myUnorderedMap) {
        std::cout << pair.first << ": " << pair.second << std::endl;
    }
}
// 演示 std::multimap 的使用
void testMultiMap() {
    std::multimap<int, std::string> myMultiMap;
    myMultiMap.insert({1, "apple"});
    myMultiMap.insert({2, "banana"});
    myMultiMap.insert({1, "cherry"});  // 鍵 1 重復,允許插入
    std::cout << "\nstd::multimap:" << std::endl;
    for (const auto& pair : myMultiMap) {
        std::cout << pair.first << ": " << pair.second << std::endl;
    }
}
// 演示 std::unordered_multimap 的使用
void testUnorderedMultiMap() {
    std::unordered_multimap<int, std::string> myUnorderedMultiMap;
    myUnorderedMultiMap.insert({1, "apple"});
    myUnorderedMultiMap.insert({2, "banana"});
    myUnorderedMultiMap.insert({1, "cherry"});  // 鍵 1 重復,允許插入
    std::cout << "\nstd::unordered_multimap:" << std::endl;
    for (const auto& pair : myUnorderedMultiMap) {
        std::cout << pair.first << ": " << pair.second << std::endl;
    }
}
// 演示 hash_map 的使用
void testHashMap() {
    __gnu_cxx::hash_map<int, std::string> myHashMap;
    myHashMap[1] = "apple";
    myHashMap[2] = "banana";
    myHashMap[1] = "cherry";  // 鍵 1 重復,會覆蓋原有的值
    std::cout << "\nhash_map:" << std::endl;
    for (const auto& pair : myHashMap) {
        std::cout << pair.first << ": " << pair.second << std::endl;
    }
}
int main() {
    testStdMap();
    testUnorderedMap();
    testMultiMap();
    testUnorderedMultiMap();
    testHashMap();
    return 0;
}

代碼解釋

  • testStdMap 函數(shù)演示了 std::map 的使用,插入重復鍵的元素會覆蓋原有的值,元素按照鍵的升序排列。
  • testUnorderedMap 函數(shù)演示了 std::unordered_map 的使用,插入重復鍵的元素也會覆蓋原有的值,元素沒有特定的順序。
  • testMultiMap 函數(shù)演示了 std::multimap 的使用,允許插入重復鍵的元素,元素按照鍵的升序排列。
  • testUnorderedMultiMap 函數(shù)演示了 std::unordered_multimap 的使用,允許插入重復鍵的元素,元素沒有特定的順序。
  • testHashMap 函數(shù)演示了 hash_map 的使用,插入重復鍵的元素會覆蓋原有的值,元素沒有特定的順序。

需要注意的是,hash_map 不是標準 C++ 的一部分,如果你使用的編譯器不支持 ext/hash_map 頭文件,代碼可能無法編譯。建議優(yōu)先使用標準的 std::unordered_map。

到此這篇關于C++ 各種map對比的文章就介紹到這了,更多相關C++ map對比內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Linux頁面置換算法的C語言實現(xiàn)

    Linux頁面置換算法的C語言實現(xiàn)

    這篇文章主要為大家詳細介紹了Linux頁面置換算法的C語言實現(xiàn),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-12-12
  • OpenCV外接USB攝像頭的方法

    OpenCV外接USB攝像頭的方法

    這篇文章主要為大家詳細介紹了OpenCV外接USB攝像頭的方法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-07-07
  • C++多線程與鎖機制使用解讀

    C++多線程與鎖機制使用解讀

    文章主要介紹了C++中的多線程編程知識,包括線程的創(chuàng)建、參數(shù)傳遞、線程休眠、互斥鎖、條件變量、原子操作、死鎖預防、線程局部存儲、讀寫鎖和自旋鎖等內(nèi)容,并給出了相應的實現(xiàn)方法和使用場景
    2026-04-04
  • C語言 小游戲打磚塊實現(xiàn)流程詳解

    C語言 小游戲打磚塊實現(xiàn)流程詳解

    打磚塊游戲是一種動作電子游戲的名稱。玩家操作一根螢幕上水平的“棒子”,讓一顆不斷彈來彈去的“球”在撞擊作為過關目標消去的“磚塊”的途中不會落到螢幕底下。球碰到磚塊、棒子與底下以外的三邊會反彈,落到底下會失去一顆球,把磚塊全部消去就可以破關
    2021-11-11
  • C語言對堆排序一個算法思路和實現(xiàn)代碼

    C語言對堆排序一個算法思路和實現(xiàn)代碼

    這篇文章主要介紹了C語言對堆排序一個算法思路和實現(xiàn)代碼,堆排序是一種樹形選擇排序,是對直接選擇排序的有效改進,需要的朋友可以參考下
    2014-06-06
  • C++ 實現(xiàn)多數(shù)的最大公約數(shù)的實例

    C++ 實現(xiàn)多數(shù)的最大公約數(shù)的實例

    這篇文章主要介紹了C++ 實現(xiàn)多數(shù)的最大公約數(shù)的實例的相關資料,需要的朋友可以參考下
    2017-06-06
  • Opencv2.4.9函數(shù)HoughLinesP分析

    Opencv2.4.9函數(shù)HoughLinesP分析

    這篇文章主要為大家詳細介紹了Opencv2.4.9函數(shù)HoughLinesP,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • C++實現(xiàn)LeetCode(140.拆分詞句之二)

    C++實現(xiàn)LeetCode(140.拆分詞句之二)

    這篇文章主要介紹了C++實現(xiàn)LeetCode(140.拆分詞句之二),本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • C語言中四種取整方式,取余/取模運算以及負數(shù)取模問題詳解

    C語言中四種取整方式,取余/取模運算以及負數(shù)取模問題詳解

    這篇文章主要介紹了C語言中四種取整方式及負數(shù)取模問題,包括了算法的分析與改進,是很多程序設計競賽中常見的算法,需要的朋友可以參考下
    2021-09-09
  • C語言結構數(shù)組實現(xiàn)貪吃蛇小游戲

    C語言結構數(shù)組實現(xiàn)貪吃蛇小游戲

    這篇文章主要為大家詳細介紹了C語言結構數(shù)組實現(xiàn)貪吃蛇小游戲,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-10-10

最新評論

邳州市| 炎陵县| 马关县| 定兴县| 皮山县| 辽宁省| 囊谦县| 津市市| 中西区| 崇文区| 封丘县| 渭源县| 和政县| 镇平县| 南平市| 抚顺县| 弥渡县| 周口市| 北辰区| 峨眉山市| 汤原县| 灵山县| 咸宁市| 涟源市| 达拉特旗| 民和| 武清区| 含山县| 剑阁县| 江川县| 库尔勒市| 白水县| 响水县| 射阳县| 云南省| 溧阳市| 杭锦旗| 华安县| 邛崃市| 昌江| 铜陵市|