欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C++中的map使用方法詳解

 更新時間:2023年05月05日 10:05:46   作者:碼出世界的淡水魚  
C++中的map是一種關聯(lián)容器,用于存儲鍵值對。它提供了一種非常高效的方法來快速查找特定的值,并且允許我們根據(jù)鍵來排序和遍歷數(shù)據(jù)。在本文中,我們將深入了解C++中的map以及如何使用它來提高程序的效率,感興趣的朋友可以參考下

C++中的map

map的介紹

map是一種使用鍵值對的數(shù)據(jù)結構,它允許我們使用鍵來查找值。map中的鍵必須是唯一且有序的,而值可以重復并且沒有特定的順序。

map中的數(shù)據(jù)以樹結構進行組織,其中每個節(jié)點都由一個鍵和一個值組成。根據(jù)鍵的大小,節(jié)點被插入到正確的位置以保持樹的有序性。這使得在map中查找值非常高效,因為我們可以使用二分查找來快速定位值。

創(chuàng)建和初始化map

我們可以使用C++標準庫中的map頭文件來創(chuàng)建和初始化一個map。以下示例展示了如何創(chuàng)建一個map并將幾個鍵值對添加到其中:

#include <iostream>
#include <map>

using namespace std;

int main()
{
    // 創(chuàng)建一個空的map
    map<int, string> myMap;

    // 向map中添加鍵值對
    myMap.insert(pair<int, string>(1, "apple"));
    myMap.insert(pair<int, string>(2, "banana"));
    myMap.insert(pair<int, string>(3, "cherry"));

    // 輸出map中的元素
    for (auto it = myMap.begin(); it != myMap.end(); ++it) {
        cout << it->first << " : " << it->second << endl;
    }
    
    return 0;
}

輸出:

1 : apple
2 : banana
3 : cherry

在上面的示例中,我們首先創(chuàng)建了一個空的map,然后使用insert()函數(shù)將一些鍵值對添加到其中。最后,我們使用迭代器遍歷該map并輸出每個鍵值對。

我們還可以使用初始化列表來初始化map。以下示例展示了如何使用初始化列表來創(chuàng)建并初始化一個map:

map<string, int> myMap {
    {"apple", 1},
    {"banana", 2},
    {"cherry", 3}
};

map中的查找操作

向map中添加元素后,我們可以使用其鍵來查找相應的值。使用find()方法可以在map中查找給定鍵的值。如果鍵存在,則find()方法返回指向該元素的迭代器。否則,它將返回指向map結尾的迭代器。

以下示例展示了如何在map中查找值:

#include <iostream>
#include <map>

using namespace std;

int main()
{
    map<string, int> myMap {
        {"apple", 1},
        {"banana", 2},
        {"cherry", 3}
    };

    // 在map中查找元素
    auto it = myMap.find("apple");
    if (it != myMap.end()) {
        cout << "apple is found" << endl;
    } else {
        cout << "apple is not found" << endl;
    }

    it = myMap.find("pear");
    if (it != myMap.end()) {
        cout << "pear is found" << endl;
    } else {
        cout << "pear is not found" << endl;
    }
    
    return 0;
}

輸出:

apple is found
pear is not found

在上面的示例中,我們首先創(chuàng)建了一個map并向其中添加了一些鍵值對。然后,我們使用find()方法在map中查找給定的鍵,如果找到則輸出相應的消息。

map的刪除操作

我們可以使用erase()方法從map中刪除元素。erase()函數(shù)需要一個迭代器作為參數(shù),可以使用find()方法查找迭代器,然后使用erase()方法來刪除元素。以下示例展示了如何從map中刪除特定鍵值對:

#include <iostream>
#include <map>

using namespace std;

int main()
{
    map<string, int> myMap {
        {"apple", 1},
        {"banana", 2},
        {"cherry", 3}
    };

    // 刪除map中的某個元素
    auto it = myMap.find("apple");
    if (it != myMap.end()) {
        myMap.erase(it);
    }

    // 輸出map中的元素
    for (auto it = myMap.begin(); it != myMap.end(); ++it) {
        cout << it->first << " : " << it->second << endl;
    }
    
    return 0;
}

輸出:

banana : 2
cherry : 3

在上面的示例中,我們首先創(chuàng)建了一個map并向其中添加了一些鍵值對。然后,我們使用find()方法查找要刪除的元素

接下來我們來看看如何在map中遍歷元素、如何使用自定義比較器排序map,以及如何使用lower_bound()和upper_bound()方法進行范圍查找。

map的遍歷操作

我們可以使用迭代器來遍歷map中的元素。以下示例展示了如何使用迭代器遍歷map:

#include <iostream>
#include <map>

using namespace std;

int main()
{
    map<string, int> myMap {
        {"apple", 1},
        {"banana", 2},
        {"cherry", 3}
    };

    // 輸出map中的元素
    for (auto it = myMap.begin(); it != myMap.end(); ++it) {
        cout << it->first << " : " << it->second << endl;
    }
    
    return 0;
}

輸出:

apple : 1
banana : 2
cherry : 3

在上面的示例中,我們使用迭代器遍歷map中的所有元素,并輸出每個鍵值對。

在map中使用自定義比較器排序

默認情況下,map按鍵的升序進行排序。如果我們要按照其他方式進行排序,我們可以使用一個自定義比較器來指定排序的規(guī)則。以下示例展示了如何使用自定義比較器按值進行排序:

#include <iostream>
#include <map>

using namespace std;

bool myComp(const pair<string, int>& a, const pair<string, int>& b) {
    return a.second > b.second;
}

int main()
{
    map<string, int> myMap {
        {"apple", 1},
        {"banana", 2},
        {"cherry", 3}
    };

    // 按值排序
    vector<pair<string, int>> vec(myMap.begin(), myMap.end());
    sort(vec.begin(), vec.end(), myComp);

    // 輸出排序后的結果
    for (auto it = vec.begin(); it != vec.end(); ++it) {
        cout << it->first << " : " << it->second << endl;
    }
    
    return 0;
}

輸出:

cherry : 3
banana : 2
apple : 1

在上面的示例中,我們定義了一個自定義比較器函數(shù)myComp來按值對map進行排序。然后,我們將map中的鍵值對存儲在一個vector中,并使用自定義比較器來進行排序。最后,我們遍歷已排序的vector并輸出相應的鍵值對。

使用lower_bound()和upper_bound()進行范圍查找

我們可以使用lower_bound()和upper_bound()方法來查找map中一定范圍內(nèi)的鍵值對。lower_bound()函數(shù)返回指向第一個大于等于給定鍵的元素的迭代器,而upper_bound()函數(shù)返回指向第一個大于給定鍵的元素的迭代器。

以下示例展示了如何使用lower_bound()和upper_bound()方法查找map中給定范圍的鍵值對:

#include <iostream>
#include <map>

using namespace std;

int main()
{
    map<string, int> myMap {
        {"apple", 1},
        {"banana", 2},
        {"cherry", 3},
        {"date", 4},
        {"elderberry", 5}
    };

    // 查找范圍內(nèi)的元素
    auto itlow = myMap.lower_bound("b");
    auto itup = myMap.upper_bound("d");

    // 輸出找到的元素
    for (auto it = itlow; it != itup; ++it) {
        cout << it->first << " : " << it->second << endl;
    }
    
    return 0;
}

輸出:

banana : 2
cherry : 3

在上面的示例中,我們首先創(chuàng)建了一個map并向其中添加一些鍵值對。然后,我們使用lower_bound()和upper_bound()方法查找鍵值在范圍內(nèi)的元素。最后,我們遍歷找到的元素并輸出它們的鍵值對。

總結:

在本文中,我們了解了C++中的map。map是一種關聯(lián)容器,可以快速查找給定鍵的值。我們還展示了如何創(chuàng)建和初始化map、如何在map中查找、刪除元素、遍歷map以及如何使用自定義比較器和范圍查找方法。map是C++中非常有用和高效的數(shù)據(jù)結構,值得程序員們的深入學習和掌握。

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

相關文章

  • C++中頭文件和源文件詳細介紹

    C++中頭文件和源文件詳細介紹

    這篇文章主要介紹了C++中頭文件和源文件詳細介紹的相關資料,需要的朋友可以參考下
    2017-02-02
  • C++ 的類型轉換詳解

    C++ 的類型轉換詳解

    本篇文章是對C++ 類型轉換的詳細介紹,需要的朋友參考下,小編覺得這篇文章寫的不錯,希望能夠給你帶來幫助
    2021-11-11
  • 將?C++?類型屬性暴露給?QML

    將?C++?類型屬性暴露給?QML

    這篇文章主要介紹了將?C++?類型屬性暴露給?QML,?QML?是一種基于?JavaScript?的聲明式語言。在?Qt5中,QML有了長足進步,并且同?C++?并列成為?Qt?的首選編程語言下面一起進入文章學習?QML的條件下也看看如何將將?C++?類型屬性暴露給?QML,需要的朋友可以參考一下
    2021-12-12
  • C語言數(shù)據(jù)的存儲超詳細講解中篇練習

    C語言數(shù)據(jù)的存儲超詳細講解中篇練習

    使用編程語言進行編程時,需要用到各種變量來存儲各種信息。變量保留的是它所存儲的值的內(nèi)存位置。這意味著,當您創(chuàng)建一個變量時,就會在內(nèi)存中保留一些空間。您可能需要存儲各種數(shù)據(jù)類型的信息,操作系統(tǒng)會根據(jù)變量的數(shù)據(jù)類型,來分配內(nèi)存和決定在保留內(nèi)存中存儲什么
    2022-04-04
  • C++11新特性std::tuple的使用方法

    C++11新特性std::tuple的使用方法

    這篇文章主要介紹了C++11新特性-std::tuple的使用方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-10-10
  • C語言進階二叉樹的基礎與銷毀及層序遍歷詳解

    C語言進階二叉樹的基礎與銷毀及層序遍歷詳解

    朋友們好,這篇播客我們繼續(xù)C++的初階學習,現(xiàn)在對我們對C++的二叉樹基礎oj與二叉樹銷毀和層序遍歷進行練習,讓我們相互學習,共同進步
    2022-06-06
  • C語言編寫猜數(shù)游戲

    C語言編寫猜數(shù)游戲

    這篇文章主要為大家詳細介紹了C語言編寫猜數(shù)游戲,可以自定義猜數(shù)范圍和機會次數(shù),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • C語言實現(xiàn)ATM機存取款系統(tǒng)

    C語言實現(xiàn)ATM機存取款系統(tǒng)

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)ATM機存取款系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • Qt利用QJson實現(xiàn)解析數(shù)組的示例詳解

    Qt利用QJson實現(xiàn)解析數(shù)組的示例詳解

    這篇文章主要為大家詳細介紹了Qt如何利用QJson實現(xiàn)解析數(shù)組功能,文中的示例代碼講解詳細,對我們學習Qt有一定幫助,需要的小伙伴可以了解一下
    2022-10-10
  • C++-操作符重載、并實現(xiàn)復數(shù)類詳解

    C++-操作符重載、并實現(xiàn)復數(shù)類詳解

    這篇文章主要介紹了C++-操作符重載、并實現(xiàn)復數(shù)類,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-03-03

最新評論