it编程 > 编程语言 > C/C++

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

24人参与 2025-05-19 C/C++

1. map插入操作基础

map是c++ stl中的关联容器,存储键值对(key-value pairs)。插入元素时有四种主要方式,各有特点:

1.1 头文件与声明

#include <map>
using namespace std;
map<int, string> mapstu;  // 键为int,值为string

2. 四种插入方式详解

2.1 方式一:构造pair后插入

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

特点

示例判断

if (ret.second == true) {
    cout << "插入成功!value:" << (*(ret.first)).second << endl;
} else {
    cout << "插入失败!" << endl;  // 键已存在时会失败
}

注意:对于map,如果键已存在,插入会失败,不会覆盖原有值。

2.2 方式二:使用make_pair

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

优点

2.3 方式三:使用value_type

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

特点

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

mapstu[4] = "赵六";      // 插入
mapstu[4] = "小赵六";    // 修改

关键特性

string strname = mapstu[8];  // 键8不存在时会自动插入

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

特殊用法

mapstu[6] = mapstu[5];  // 复制键5的值到键6
mapstu[7] = mapstu[4];  // 复制键4的值到键7

3. 四种方式对比

特性方式一(pair)方式二(make_pair)方式三(value_type)方式四([])
语法复杂度
返回值pair<iter,bool>pair<iter,bool>pair<iter,bool>值引用
键存在时的行为不覆盖不覆盖不覆盖覆盖
可能意外插入
类型安全性最高
性能中等中等中等稍快

4. 遍历map内容

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

或使用c++11范围for循环:

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

5. 关键注意事项

6. 实际应用建议

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;
    }
    // 重复插入测试
    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];  // 复制
    mapstu[7] = mapstu[4];  // 复制
    // 遍历输出
    for (const auto& pair : mapstu) {
        cout << pair.first << ", " << pair.second << endl;
    }
    system("pause");
    return 0;
}

8. 扩展知识

8.1 c++11的emplace

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

mapstu.emplace(5, "钱七");  // 直接在容器内构造元素,避免临时对象

8.2 异常安全性

insertemplace提供强异常保证:如果插入失败,容器保持不变。

8.3 性能优化

对于大批量插入:

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

mapstu.insert(hint_iterator, make_pair(10, "孙八"));

或者先构建vector再批量插入

到此这篇关于c++ map容器: 插入操作的文章就介绍到这了,更多相关c++ map容器插入内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

您想发表意见!!点此发布评论

推荐阅读

Kotlin 中 infix 关键字的原理和使用场景解析

05-19

VSCode中C/C++安装、配置以及使用的完整指南(适合新手小白)

05-19

PyQt5 QStyleOptionViewItem类的具体使用

05-19

PyQt5 QItemSelection类使用小结

05-19

PyQt5 QDate类的具体使用

05-19

Qt中Qfile类的使用

05-20

猜你喜欢

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论