簡介: CSDN博客專家,專注Android/Linux系統,分享多mic語音方案、音視頻、編解碼等技術,與大家一起成長!
優質專欄:Audio工程師進階系列【原創干貨持續更新中……】🚀
人生格言: 人生從來沒有捷徑,只有行動才是治療恐懼和懶惰的唯一良藥.
1.前言
本篇目的:map成員函數emplace與pair用法區別。
2. std::map
容器的emplace
函數和pair
類型使用區別
emplace
函數是std::map
容器特有的成員函數,用于在容器中插入新的鍵值對。它接受鍵和值的構造函數參數,并直接構造鍵值對對象,避免了臨時的pair
對象的創建,從而提高了性能。pair
是一個模板結構體,定義了兩個成員變量first
和second
,分別表示鍵和值。可以使用std::make_pair
函數或直接使用花括號初始化來創建pair
對象,并將其插入到std::map
容器中。
3.應用實例
<1>.容器map的成員函數使用emplace函數插入鍵值對
#include <iostream>
#include <map>int main() {// 使用emplace函數插入鍵值對std::map<int, std::string> myMap;myMap.emplace(std::make_pair(1, "Apple"));myMap.emplace(std::make_pair(2, "Banana"));// 遍歷第一個map容器for (const auto& pair : myMap) {std::cout << "Key: " << pair.first << ", Value: " << pair.second << std::endl;}return 0;
}
<2>.使用pair對象插入鍵值對
#include <iostream>
#include <map>
#include <utility>int main() {// 創建一個std::map<std::pair<int, int>>,鍵是std::pair,值是intstd::map<std::pair<int, int>, int> keyValueMap;// 向map中插入鍵值對keyValueMap.insert(std::make_pair(std::make_pair(1, 2), 100));keyValueMap.insert(std::make_pair(std::make_pair(3, 4), 200));keyValueMap.insert(std::make_pair(std::make_pair(5, 6), 300));// 遍歷map并輸出鍵值對for (const auto& kv : keyValueMap) {std::cout << "Key: (" << kv.first.first << ", " << kv.first.second << ")";std::cout << " Value: " << kv.second << std::endl;}return 0;
}
<3>.遍歷map中的key-value
int main() {std::map<string, string> mComponents;auto emplace = [&](const char *libPath) {mComponents.emplace(libPath, libPath);};// 添加元素到 mapemplace("libcodec2_soft_aacdec.so");emplace("libcodec2_soft_aacenc.so");emplace("libcodec2_soft_amrnbdec.so");emplace("libcodec2_soft_amrnbenc.so");emplace("libcodec2_soft_amrwbdec.so");emplace("libcodec2_soft_amrwbenc.so");//1.使用auto關鍵字遍歷for (const auto& kv : mComponents) {cout << "Key: " << kv.first << ", Value: " << kv.second << endl;}//2.使用iterator遍歷std::map<std::string, std::string>::iterator it;for (it = mComponents.begin(); it != mComponents.end(); ++it) {std::cout << "Key: " << it->first << ", Value: " << it->second << std::endl;}return 0;
}