App下載

如何在C++中使用鍵值對?c++map介紹

閨怨無夢 2023-06-14 09:53:32 瀏覽數(shù) (2299)
反饋

C++ map是一種關(guān)聯(lián)容器,它可以存儲鍵值對的數(shù)據(jù)。map的特點是,它的鍵是唯一的,而且是按照一定的順序排列的。map的底層實現(xiàn)是紅黑樹,所以它的插入、刪除、查找等操作的時間復(fù)雜度都是O(logn)。

要使用map,首先需要包含頭文件,然后聲明一個map對象,指定鍵和值的類型。例如:

#include <map>
#include <string>
#include <iostream>
using namespace std;


//聲明一個map對象,鍵是string類型,值是int類型
map<string, int> m;

接下來,可以用以下幾種方式向map中添加數(shù)據(jù):

  • 使用下標運算符[],如果鍵不存在,則會創(chuàng)建一個新的鍵值對,并將值初始化為默認值。如果鍵已經(jīng)存在,則會覆蓋原來的值。例如:

m["Alice"] = 100; //創(chuàng)建一個新的鍵值對,鍵為"Alice",值為100
m["Bob"] = 200; //創(chuàng)建一個新的鍵值對,鍵為"Bob",值為200
m["Alice"] = 300; //覆蓋原來的值,將"Alice"對應(yīng)的值改為300

  • 使用insert()函數(shù),它可以接受一個pair對象或一個迭代器范圍作為參數(shù)。如果鍵不存在,則會插入一個新的鍵值對。如果鍵已經(jīng)存在,則不會做任何改變。例如:

m.insert(pair<string, int>("Charlie", 400)); //插入一個新的鍵值對,鍵為"Charlie",值為400
m.insert(pair<string, int>("Alice", 500)); //不會改變?nèi)魏螙|西,因為"Alice"已經(jīng)存在

  • 使用emplace()函數(shù),它可以直接傳遞鍵和值作為參數(shù),而不需要創(chuàng)建pair對象。它的效果和insert()函數(shù)相同。例如:

m.emplace("David", 600); //插入一個新的鍵值對,鍵為"David",值為600
m.emplace("Bob", 700); //不會改變?nèi)魏螙|西,因為"Bob"已經(jīng)存在

要從map中刪除數(shù)據(jù),可以用以下幾種方式:

  • 使用erase()函數(shù),它可以接受一個鍵或一個迭代器或一個迭代器范圍作為參數(shù)。它會刪除指定的鍵值對,并返回被刪除的元素個數(shù)或者下一個有效的迭代器。例如:

m.erase("Alice"); //刪除"Alice"對應(yīng)的鍵值對,并返回1
m.erase(m.begin()); //刪除第一個鍵值對,并返回下一個有效的迭代器
m.erase(m.begin(), m.end()); //刪除所有的鍵值對,并返回尾后迭代器

  • 使用clear()函數(shù),它會清空整個map,使其變成空容器。

要從map中查找數(shù)據(jù),可以用以下幾種方式:

  • 使用find()函數(shù),它可以接受一個鍵作為參數(shù),并返回指向該鍵對應(yīng)的元素的迭代器。如果沒有找到該鍵,則返回尾后迭代器。例如:

auto it = m.find("Bob"); //查找"Bob"對應(yīng)的元素,并返回指向它的迭代器
if (it != m.end()) {
cout << it->first << " " << it->second << endl; //輸出"Bob 200"
} else {
cout << "Not found." << endl; //輸出"Not found."
}

  • 使用count()函數(shù),它可以接受一個鍵作為參數(shù),并返回該鍵在map中出現(xiàn)的次數(shù)。由于map中的鍵是唯一的,所以該函數(shù)只能返回0或1。例如:

int n = m.count("Charlie"); //查找"Charlie"在map中出現(xiàn)的次數(shù),并返回它
if (n == 1) {
cout << "Found." << endl; //輸出"Found."
} else {
cout << "Not found." << endl; //輸出"Not found."
}

  • 使用下標運算符[],如果鍵存在,則返回對應(yīng)的值的引用。如果鍵不存在,則會創(chuàng)建一個新的鍵值對,并將值初始化為默認值,并返回該值的引用。例如:

int x = m["David"]; //查找"David"對應(yīng)的值,并返回它,此時x為600
int y = m["Eve"]; //查找"Eve"對應(yīng)的值,由于不存在,會創(chuàng)建一個新的鍵值對,鍵為"Eve",值為0,并返回該值的引用,此時y為0

要遍歷map中的數(shù)據(jù),可以用以下幾種方式:

  • 使用迭代器,可以用begin()和end()函數(shù)獲取map的首尾迭代器,然后用++運算符逐個訪問每個元素。每個元素是一個pair對象,可以用first和second成員訪問鍵和值。例如:

for (auto it = m.begin(); it != m.end(); ++it) {
cout << it->first << " " << it->second << endl; //輸出每個鍵值對
}

  • 使用范圍for循環(huán),可以直接遍歷map中的每個元素。每個元素是一個pair對象,可以用first和second成員訪問鍵和值。例如:

for (auto p : m) {
cout << p.first << " " << p.second << endl; //輸出每個鍵值對
}

  • 使用for_each算法,可以傳遞一個函數(shù)或者一個lambda表達式作為參數(shù),對map中的每個元素進行操作。每個元素是一個pair對象,可以用first和second成員訪問鍵和值。例如:

#include <algorithm>
//定義一個函數(shù),打印一個鍵值對
void print(pair<string, int> p) {
cout << p.first << " " << p.second << endl;
}
//使用for_each算法,傳遞print函數(shù)作為參數(shù)
for_each(m.begin(), m.end(), print);
//使用for_each算法,傳遞lambda表達式作為參數(shù)
for_each(m.begin(), m.end(), [](pair<string, int> p) {
cout << p.first << " " << p.second << endl;
});

以上就是C++ map的基本用法,希望對你有所幫助。

C++相關(guān)課程推薦 C++相關(guān)課程

C++

0 人點贊