c++STL容器map的基本操作

主要介绍了c++STL-map的插入、查找、删除、清空等操作
```cpp
#include<iostream>
#include<map>
using namespace std;
//定义一个map对象
map<int,string>mp;

//插入元素
void mapInsert(){
	//插入元素
	//method1 用insert插入make_pair
	auto res0=mp.insert(make_pair(000,"student_zero"));
	if(res0.second){
		cout<<"插入成功"<<endl;
	}else{
		cout<<"插入失败"<<endl;
	}
	//method2 用insert插入pair
	auto res1=mp.insert(pair<int,string>(001,"student_one"));
	if(res1.second){
		cout<<"插入成功"<<endl;
	}else{
		cout<<"插入失败"<<endl;
	}
	//method3 用insert插入value_type数据
	auto res2=mp.insert(map<int,string>::value_type(002,"student_two"));
	if(res2.second){
		cout<<"插入成功"<<endl;
	}else{
		cout<<"插入失败"<<endl;
	}
	//method4 使用emplace插入
	auto res3=mp.emplace(003,"student_thrid");
	if(res3.second){
		cout<<"插入成功"<<endl;
	}else{
		cout<<"插入失败"<<endl;
	}
	//method4 用数组方式插入
	mp[004]="student_two";
	/*插入介绍
	在C++11标准之前,auto关键字只能用于单个变量的声明,不能用于数组的声明。
	但是从C++11开始,auto关键字可以用于数组类型的推导,可以根据数组元素的类型自动推导出数组的类型。
	
	用insert函数插入数据,在数据的 插入上涉及到集合的唯一性这个概念,即当map中有这个关键字时,
	insert操作是不能在插入数据的,但是用数组方式就不同了,它可以覆盖以前该关键字对应的值
	
	emplace函数是C++11新增的函数,可以直接在map容器中构造键值对,比insert函数更高效。
	需要注意的是,如果插入的键已经存在于map中,那么emplace函数将不会插入新的键值对,而是返回一个迭代器,
	指向已经存在的键值对。无论使用哪种插入方式,map容器都会自动按照键的字典序进行排序。
	*/
}

//查找元素
void mapFind(){
	//method1: find 返回迭代器指向当前查找元素的位置否则返回map::end()位置
    auto it = mp.find(001);
    // 判断是否找到元素
    if (it != mp.end()) {
        cout<<"成功找到了"<< it->second << endl;
    } else {
        cout << "没有找到" << endl;
    }
    
	//method2:使用count函数统计键为001的元素在map中出现的次数,如果次数大于0,则表示该元素存在于map中。
    int n = mp.count(001);
    // 判断是否找到元素
    if (n > 0) {
        cout << "找到了" << endl;
    } else {
        cout << "没有找到" << endl;
    }	
}


//删除元素
bool is_odd(const pair<int, string>& p) {
    return p.first % 2 != 0;
}
void mapDelete(){
	int n;
    //method1 直接删除
    n = mp.erase(001);
    // 判断是否删除成功
    if (n > 0) {
        cout << "删除成功" << endl;
    } else {
        cout << "删除失败" << endl;
    }
    //method2 删除特定范围的元素
    auto it1 = mp.find(002);
    auto it2 = mp.find(003);
    if (it1 != mp.end() && it2 != mp.end()) {
        mp.erase(it1, it2);
        cout << "删除成功" << endl;
    } else {
        cout << "删除失败" << endl;
    }
    //method3 删除满足特定条件的元素,遍历map容器,找到需要删除的元素
    auto it = mp.begin();
    while (it != mp.end()) {
        if (is_odd(*it)) {
            it = mp.erase(it);
        } else {
            ++it;
        }
    }
    // 打印剩余元素
    for (auto it = mp.begin(); it != mp.end(); ++it) {
        cout << it->first << " " << it->second << endl;
    }
}

//清空元素
void mapClear(){
	//method1: 用迭代器范围刪除 : 把整个map清空,//等同于mp.clear()
	mp.erase(mp.begin(), mp.end());
	//method2: 清空所有元素
    mp.clear();
    // 判断是否清空成功
    if (mp.empty()) {
        cout << "清空成功" << endl;
    } else {
        cout << "清空失败" << endl;
    }	
    //method3:
    //使用swap函数可以清空所有元素并释放内存,即将map容器中的元素数量置为0,
	//并交换map容器和一个空的map容器的内容。这样可以快速释放map容器占用的内存。
    // 清空所有元素并释放内存
    map<int,string>().swap(mp);
    // 判断是否清空成功
    if (mp.empty()) {
        cout << "清空成功" << endl;
    } else {
        cout << "清空失败" << endl;
    }	
}
int main(){

	mapInsert();
	mapFind();
	mapDelete();
	mapClear();
	cout << "map size: " << mp.size() << endl;
}`在这里插入代码片`

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值