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

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

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

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

map是C++ STL中的關(guān)聯(lián)容器,存儲(chǔ)鍵值對(duì)(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對(duì)象
  • insert返回一個(gè)pair<iterator, bool>
    • first:指向插入元素的迭代器
    • second:是否插入成功(bool)

示例判斷

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

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

2.2 方式二:使用make_pair

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

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

  • 語(yǔ)法更簡(jiǎn)潔,無(wú)需顯式指定模板參數(shù)
  • 自動(dòng)推導(dǎo)pair類(lèi)型
  • 同樣返回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>
  • 類(lèi)型安全,確保鍵的類(lèi)型正確
  • 同樣返回pair<iterator, bool>

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

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

關(guān)鍵特性

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

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

特殊用法

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

3. 四種方式對(duì)比

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

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ù)插入會(huì)失敗
  • 自動(dòng)排序:元素按鍵的升序自動(dòng)排列
  • []操作符的風(fēng)險(xiǎn)
    • 可能意外插入新元素
    • 訪問(wèn)不存在的鍵時(shí)會(huì)用默認(rèn)值創(chuàng)建新元素
  • 性能考慮
    • 插入操作平均時(shí)間復(fù)雜度O(log n)
    • 對(duì)于已知不存在的鍵,使用insert[]更高效

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

  • 需要知道是否插入成功:使用insert+檢查返回值
  • 需要覆蓋現(xiàn)有值:使用[]操作符
  • 避免意外插入:先用find檢查鍵是否存在
  • 代碼簡(jiǎn)潔性:優(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ù)插入測(cè)試
    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ò)展知識(shí)

8.1 C++11的emplace

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

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

8.2 異常安全性

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

8.3 性能優(yōu)化

對(duì)于大批量插入:

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

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

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

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

相關(guān)文章

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

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

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

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

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

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

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

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

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

    C語(yǔ)言的堆串操作詳解

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

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

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

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

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

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

    這篇文章主要介紹了C語(yǔ)言實(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),文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • C語(yǔ)言實(shí)現(xiàn)猜數(shù)字游戲

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

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

最新評(píng)論

徐闻县| 霸州市| 馆陶县| 肃宁县| 六盘水市| 鹤壁市| 乐陵市| 台前县| 大冶市| 区。| 萝北县| 萨迦县| 读书| 绍兴县| 广汉市| 临洮县| 常宁市| 北流市| 泰和县| 福安市| 资源县| 玉屏| 湖口县| 玉山县| 东阿县| 资溪县| 宜昌市| 毕节市| 渝北区| 宁化县| 克什克腾旗| 浦城县| 瓦房店市| 岢岚县| 湟源县| 图片| 勐海县| 安顺市| 漳浦县| 营口市| 中卫市|