C++ map 基本操作

#include<iostream>
#include<stdlib.h>
#include<string>
#include<map>

using namespace std;

typedef map<string,long long> URL_COUNT;

//map的打印
void print(URL_COUNT url_count){
        for(map<string,long long>::iterator i = url_count.begin(); i!=url_count.end(); i++){
                cout << i->first << " " << i->second <<endl;
        }
}
 
void print_ele(map<string,long long>::iterator ele){
        cout << ele->first << "=>" << ele->second << endl;
}

int main(){

        //map的建立
        URL_COUNT url_count;

        //************************************************************
        //map的插入
        //map[key] = value
        url_count["a"] = 1;
        url_count["b"] = 2;
        url_count["c"] = 3;

        //insert(map<string,long long>::value_type(key,value))
        url_count.insert(map<string,long long>::value_type("e",5));

        //insert(make_pair(key,value))
        url_count.insert(make_pair("f",6));

        //insert(pair<string,int> p)
        pair<string, int> p;
        p.first = "g";
        p.second = 7;
        url_count.insert(p);

        //不正确的插入方式
        //url_count.insert("d",4);

        print(url_count);

        //*************************************************************
        //map的查找
        //count函数只返回0或者1
        cout << url_count.count("e") << endl;
        cout << url_count.count("s") << endl;

        //find函数返回key对应的对象的迭代器
        print_ele(url_count.find("f"));
        //没有找到时返回Segmentation fault,慎用
        //print_ele(url_count.find("s"));

        //*************************************************************
        //map的删除
        //erase(key),有则删除返回1,无则返回0
        cout << url_count.erase("f") << endl;

        //erase(指向map元素的迭代器)
        map<string,long long>::iterator i = url_count.find("g");
        url_count.erase(i);

        print(url_count);

        return 0;
}


返回结果:

a 1
b 2
c 3
e 5
f 6
g 7
1
0
f=>6
1
a 1
b 2
c 3
e 5


<think>好的,用户想了解C++map的使用方法和常见操作示例。首先,我需要回忆一下C++ map的基本概念。map是STL中的一个关联容器,存储键值对,并且按键自动排序。用户可能需要知道如何初始化、插入元素、遍历、查找和删除元素等常见操作。 根据提供的引用内容,引用[1]提到了map的迭代器类型,比如const_iterator和普通iterator的区别,以及在不同map类型下的返回情况。引用[2]则给出了构造map和插入元素的几种方法,比如使用operator[]、insert和make_pair。这些信息应该整合到回答中,确保用户清楚不同的插入方式及其适用场景。 接下来,我需要组织回答的结构。首先介绍map的基本概念,然后分点说明常用操作,如初始化、插入、遍历、查找、删除等,每个部分都要给出示例代码,并引用对应的参考资料。同时,需要注意用户提到的格式要求,比如行内公式用$...$,独立公式单独成段,但这里可能用不到数学公式,主要是代码示例。 需要注意用户可能对const_iterator和普通iterator的区别不太清楚,需要解释清楚,特别是在const map中的使用限制,如不能修改值。另外,插入操作的几种方法,比如使用insert和operator[]的区别,比如当键已存在时的不同行为,这也是常见的问题点。 还要考虑用户的实际应用场景,比如如何高效地遍历map,如何安全地查找元素避免未找到的情况,删除元素的正确方法等。这些问题都需要在示例中体现,并给出最佳实践的建议。 最后,生成相关问题,这些问题应该围绕用户可能进一步想了解的内容,比如性能分析、底层实现原理、与其他容器的比较等,这样可以帮助用户深入学习和解决问题。</think>### C++ map 使用方法及常见操作示例 C++ 中的 `map` 是标准模板库(STL)提供的关联容器,基于红黑树实现,用于存储键值对(key-value pairs),并按键自动升序排列。以下为常用操作及示例: --- #### 1. **初始化与插入元素** - **初始化**:需指定键和值的类型,例如 `map<int, string>`。 - **插入方法**: 1. 使用 `operator[]` 直接赋值(若键存在则覆盖值)[^2]。 2. 使用 `insert` 函数配合 `pair` 或 `make_pair`(若键存在则插入失败)。 ```cpp #include <map> using namespace std; map<int, string> stuMap; stuMap[1001] = "Jason"; // 方法1 stuMap.insert(pair<int, string>(1002, "Helen")); // 方法2 stuMap.insert(make_pair(1003, "Steve")); // 方法3 ``` --- #### 2. **遍历元素** 使用迭代器遍历,注意 `begin()` 和 `end()` 返回的迭代器类型(`iterator` 或 `const_iterator`)取决于 `map` 是否为 `const`[^1]。 ```cpp for (auto it = stuMap.begin(); it != stuMap.end(); ++it) { cout << "学号:" << it->first << " 姓名:" << it->second << endl; } // 或使用 C++11 范围循环 for (const auto& pair : stuMap) { cout << "学号:" << pair.first << " 姓名:" << pair.second << endl; } ``` --- #### 3. **查找元素** - **`find()` 函数**:返回指向键的迭代器,未找到则返回 `end()`。 - **`count()` 函数**:返回键是否存在(0或1)。 ```cpp auto it = stuMap.find(1002); if (it != stuMap.end()) { cout << "找到学生:" << it->second << endl; } if (stuMap.count(1004) == 0) { cout << "学号1004不存在" << endl; } ``` --- #### 4. **删除元素** - **`erase()` 函数**:可通过键或迭代器删除。 ```cpp stuMap.erase(1001); // 按键删除 auto it = stuMap.find(1002); if (it != stuMap.end()) { stuMap.erase(it); // 按迭代器删除 } ``` --- #### 5. **其他操作** - **获取大小**:`stuMap.size()` - **清空容器**:`stuMap.clear()` - **判断是否为空**:`stuMap.empty()` --- ### 关键注意事 1. **键的唯一性**:每个键在 `map` 中唯一,重复插入会失败(`insert`)或覆盖(`operator[]`)。 2. **迭代器类型**:对 `const map` 使用 `begin()` 会返回 `const_iterator`,禁止修改值。 3. **性能特点**:查找、插入、删除操作的时间复杂度为 $O(\log n)$,适合需要有序键的场景。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值