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

C++ map容器插入操作方式詳解

 更新時(shí)間:2025年05月19日 10:20:52   作者:苕皮藍(lán)牙土豆  
map是C++ STL中的關(guān)聯(lián)容器,存儲鍵值對(key-value pairs),下面給大家介紹C++ map容器插入操作方式,感興趣的朋友一起看看吧

1. map插入操作基礎(chǔ)

map是C++ STL中的關(guān)聯(lián)容器,存儲鍵值對(key-value pairs)。插入元素時(shí)有四種主要方式,各有特點(diǎn):

1.1 頭文件與聲明

#include <map>
using namespace std;
map<int, string> mapStu;  // 鍵為int,值為string

2. 四種插入方式詳解

2.1 方式一:構(gòu)造pair后插入

pair<map<int, string>::iterator, bool> ret = 
    mapStu.insert(pair<int, string>(1, "張三"));

特點(diǎn)

  • 顯式構(gòu)造pair對象
  • insert返回一個(gè)pair<iterator, bool>
    • first:指向插入元素的迭代器
    • second:是否插入成功(bool)

示例判斷

if (ret.second == true) {
    cout << "插入成功!value:" << (*(ret.first)).second << endl;
} else {
    cout << "插入失敗!" << endl;  // 鍵已存在時(shí)會失敗
}

注意:對于map,如果鍵已存在,插入會失敗,不會覆蓋原有值。

2.2 方式二:使用make_pair

mapStu.insert(make_pair(2, "李四"));

優(yōu)點(diǎn)

  • 語法更簡潔,無需顯式指定模板參數(shù)
  • 自動(dòng)推導(dǎo)pair類型
  • 同樣返回pair<iterator, bool>

2.3 方式三:使用value_type

mapStu.insert(map<int, string>::value_type(3, "王五"));

特點(diǎn)

  • value_type是map內(nèi)部定義的typedef,等同于pair<const Key, T>
  • 類型安全,確保鍵的類型正確
  • 同樣返回pair<iterator, bool>

2.4 方式四:使用[]操作符

mapStu[4] = "趙六";      // 插入
mapStu[4] = "小趙六";    // 修改

關(guān)鍵特性

  • 查找+插入/修改:先查找鍵是否存在,不存在則插入,存在則修改
  • 可能意外插入:訪問不存在的鍵時(shí)會自動(dòng)插入
string strName = mapStu[8];  // 鍵8不存在時(shí)會自動(dòng)插入

返回值:返回值的引用,可直接修改

特殊用法

mapStu[6] = mapStu[5];  // 復(fù)制鍵5的值到鍵6
mapStu[7] = mapStu[4];  // 復(fù)制鍵4的值到鍵7

3. 四種方式對比

特性方式一(pair)方式二(make_pair)方式三(value_type)方式四([])
語法復(fù)雜度
返回值pair<iter,bool>pair<iter,bool>pair<iter,bool>值引用
鍵存在時(shí)的行為不覆蓋不覆蓋不覆蓋覆蓋
可能意外插入
類型安全性最高
性能中等中等中等稍快

4. 遍歷map內(nèi)容

for (map<int, string>::iterator it = mapStu.begin(); 
     it != mapStu.end(); it++) {
    cout << it->first << ", " << it->second << endl;
}

或使用C++11范圍for循環(huán):

for (const auto& pair : mapStu) {
    cout << pair.first << ", " << pair.second << endl;
}

5. 關(guān)鍵注意事項(xiàng)

  • 鍵的唯一性map中每個(gè)鍵只能出現(xiàn)一次,重復(fù)插入會失敗
  • 自動(dòng)排序:元素按鍵的升序自動(dòng)排列
  • []操作符的風(fēng)險(xiǎn)
    • 可能意外插入新元素
    • 訪問不存在的鍵時(shí)會用默認(rèn)值創(chuàng)建新元素
  • 性能考慮
    • 插入操作平均時(shí)間復(fù)雜度O(log n)
    • 對于已知不存在的鍵,使用insert[]更高效

6. 實(shí)際應(yīng)用建議

  • 需要知道是否插入成功:使用insert+檢查返回值
  • 需要覆蓋現(xiàn)有值:使用[]操作符
  • 避免意外插入:先用find檢查鍵是否存在
  • 代碼簡潔性:優(yōu)先考慮make_pairemplace(C++11)

7. 完整代碼回顧

#include <map>
#include <iostream>
using namespace std;
int main() {
    map<int, string> mapStu;
    // 方式一
    auto ret = mapStu.insert(pair<int, string>(1, "張三"));
    if (ret.second) {
        cout << "插入成功!value:" << ret.first->second << endl;
    } else {
        cout << "插入失敗!" << endl;
    }
    // 重復(fù)插入測試
    ret = mapStu.insert(pair<int, string>(1, "小張三"));
    if (!ret.second) {
        cout << "插入小張三失敗!" << endl;
    }
    // 方式二
    mapStu.insert(make_pair(2, "李四"));
    // 方式三
    mapStu.insert(map<int, string>::value_type(3, "王五"));
    // 方式四
    mapStu[4] = "趙六";
    mapStu[4] = "小趙六";  // 覆蓋
    // 特殊用法
    mapStu[6] = mapStu[5];  // 復(fù)制
    mapStu[7] = mapStu[4];  // 復(fù)制
    // 遍歷輸出
    for (const auto& pair : mapStu) {
        cout << pair.first << ", " << pair.second << endl;
    }
    system("pause");
    return 0;
}

8. 擴(kuò)展知識

8.1 C++11的emplace

C++11引入了更高效的emplace方法:

mapStu.emplace(5, "錢七");  // 直接在容器內(nèi)構(gòu)造元素,避免臨時(shí)對象

8.2 異常安全性

insertemplace提供強(qiáng)異常保證:如果插入失敗,容器保持不變。

8.3 性能優(yōu)化

對于大批量插入:

如果鍵已知有序,可以使用提示位置插入:

mapStu.insert(hint_iterator, make_pair(10, "孫八"));

或者先構(gòu)建vector再批量插入

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

相關(guān)文章

  • 一篇文章帶你了解C++Primer學(xué)習(xí)日記--處理數(shù)據(jù)

    一篇文章帶你了解C++Primer學(xué)習(xí)日記--處理數(shù)據(jù)

    今天小編就為大家分享一篇關(guān)于C++對數(shù)器的使用講解,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2021-08-08
  • 基于C++內(nèi)存分配、函數(shù)調(diào)用與返回值的深入分析

    基于C++內(nèi)存分配、函數(shù)調(diào)用與返回值的深入分析

    本篇文章是對C++中的內(nèi)存分配、函數(shù)調(diào)用與返回值進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • C語言隊(duì)列和應(yīng)用詳情

    C語言隊(duì)列和應(yīng)用詳情

    這篇文章主要介紹了C語言隊(duì)列和應(yīng)用詳情,文章將讓大家掌握掌握隊(duì)列的原理和作用、掌握隊(duì)列的寫法、掌握隊(duì)列在產(chǎn)品中的應(yīng)用,需要的朋友可以參考一下
    2022-03-03
  • C語言代碼實(shí)現(xiàn)簡易掃雷

    C語言代碼實(shí)現(xiàn)簡易掃雷

    這篇文章主要為大家詳細(xì)介紹了C語言代碼實(shí)現(xiàn)簡易掃雷,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-01-01
  • C語言的堆串操作詳解

    C語言的堆串操作詳解

    大家好,本篇文章主要講的是C語言的堆串操作詳解,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下
    2022-02-02
  • C++入門指南之貪吃蛇游戲的實(shí)現(xiàn)

    C++入門指南之貪吃蛇游戲的實(shí)現(xiàn)

    這篇文章主要給大家介紹了關(guān)于C++入門指南之貪吃蛇游戲?qū)崿F(xiàn)的相關(guān)資料,文章通過示例代碼介紹的非常詳細(xì),可以讓大家能短時(shí)間內(nèi)寫出一個(gè)貪吃蛇,需要的朋友可以參考下
    2021-10-10
  • C++內(nèi)存對齊的實(shí)現(xiàn)

    C++內(nèi)存對齊的實(shí)現(xiàn)

    本文主要介紹了C++內(nèi)存對齊的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02
  • C語言實(shí)現(xiàn)洗牌發(fā)牌小程序

    C語言實(shí)現(xiàn)洗牌發(fā)牌小程序

    這篇文章主要介紹了C語言實(shí)現(xiàn)洗牌發(fā)牌小程序,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-04-04
  • openCV中meanshift算法查找目標(biāo)的實(shí)現(xiàn)

    openCV中meanshift算法查找目標(biāo)的實(shí)現(xiàn)

    本文主要介紹了openCV中meanshift算法查找目標(biāo)的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • C語言實(shí)現(xiàn)猜數(shù)字游戲

    C語言實(shí)現(xiàn)猜數(shù)字游戲

    這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)猜數(shù)字游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-11-11

最新評論

八宿县| 民县| 牟定县| 渭源县| 介休市| 五莲县| 揭东县| 兴海县| 鹿泉市| 延庆县| 岚皋县| 马公市| 汶川县| 韶山市| 彭水| 桃园市| 洮南市| 凤山市| 新河县| 阿城市| 绿春县| 五寨县| 汉沽区| 突泉县| 怀来县| 尚志市| 玉屏| 宽甸| 新宁县| 阳曲县| 达拉特旗| 通城县| 土默特左旗| 西城区| 扎囊县| 宝丰县| 射洪县| 宜章县| 萨嘎县| 铜山县| 揭西县|