C++map容器基本操作大全(定义插入删除遍历清空查找排序)

map容器

map映射容器的元素数据是由一个键值和一个映射数据组成的,键值与映照数据之间具有一一映照的关系。map容器的数据结构也采用红黑树来实现的,插入元素的键值不允许重复,比较函数只对元素的键值进行比较,元素的各项数据可通过键值检索出来。由于map与set采用的都是红黑树的结构,所以,用法基本相似。
C++map容器基本操作大全(定义插入删除遍历清空查找排序)_第1张图片

map用法

头文件

#include 

基本操作

begin() 返回指向 map 头部的迭代器
clear() 删除所有元素
count() 返回指定元素出现的次数
empty() 如果 map 为空则返回 true
end() 返回指向 map 末尾的迭代器
erase() 删除一个元素
find() 查找一个元素
insert() 插入元素
key_comp() 返回比较元素 key 的函数
lower_bound() 返回键值>=给定元素的第一个位置
max_size() 返回可以容纳的最大元素个数
rbegin() 返回一个指向 map 尾部的逆向迭代器
rend() 返回一个指向 map 头部的逆向迭代器
size() 返回 map 中元素的个数
swap() 交换两个 map
upper_bound() 返回键值>给定元素的第一个位置
value_comp() 返回比较元素 value 的函数

创建map对象

#include
#include
using namespace std;
map<int,char>mp;//定义map容器 

map定义的类型

map ::key_type;  // 在map容器中,用作索引的键的类型
map ::mapped_type;  // 在map容器中,键所关联的值的类型
map ::value_type;  // 一个pair类型,它的first元素具有const map ::key_type类型,而second元素则为map :: mapped_type类型。

在学习map接口时,谨记其value_type是pair类型,它的值成员可以修改(second成员),但键成员不能修改。这个value_type相当于map的元素类型,而不是键所对应的值的类型。
对map迭代器进行解引用将产生pair类型的对象,它的first成员存放键,为const,而second成员存放值。

原文链接:https://blog.csdn.net/hero_myself/article/details/52313451

插入

	//数组方式插入 
	mp[1]='a';
	mp[1]='b';//key不允许重复,再次插入相当于修改value的值 
	mp[2]='a'; 
	mp[3]='b';
	mp[4]='c';
 
    //insert()方式插入
	mp.insert(map<int,char>::value_type(5,'d')); 

删除

//通过关键字key删除元素 
	mp.erase('b');

容器的size

//输出容器大小 
int s=mp.size();

元素的遍历,清空

//遍历输出map中的元素 
	map<int,char>::iterator it=mp.begin();
	while(it!=mp.end())
	{
		cout<<"key:"<<it->first<<" "; 
		cout<<"value:"<<it->second<<endl;;
		it++;
	}
 
mp.clear();//清空容器 

元素的查找

it=mp.find(1);//搜索键值为1的元素 
	/*若该键值存在,则返回该键值所在的
	  迭代器位置,不存在则返回end()迭代器位置 
	*/
	if(it!=mp.end())
	{
	    cout<<"存在键值为1的元素"<<endl;
	}

map排序

map本身默认按照key值升序排序

实例

#include
#include
using namespace std;
map<int,char>mp;//定义map容器 
int main()
{
	//数组方式插入 
	mp[1]='a';
	mp[1]='b';//key不允许重复,再次插入相当于修改value的值 
	mp[2]='a'; 
	mp[3]='b';
	mp[4]='c';
	cout<<"根据key值输出对应的value值"<<mp[1]<<endl;
	cout<<"无法根据value输出key值"<<mp['b']<<endl;
	
	//通过关键字key删除元素 
	mp.erase('b');
	
	//insert()方式插入
	mp.insert(map<int,char>::value_type(5,'d')); 
	
	//输出容器大小 
	int s=mp.size();
	cout<<s<<endl;
	
	//遍历输出map中的元素 
	map<int,char>::iterator it=mp.begin();
	while(it!=mp.end())
	{
		cout<<"key:"<<it->first<<" "; 
		cout<<"value:"<<it->second<<endl;;
		it++;
	}
	it=mp.find(1);//搜索键值为1的元素 
	/*若该键值存在,则返回该键值所在的
	  迭代器位置,不存在则返回end()迭代器位置 
	*/
	if(it!=mp.end())
	{
	    cout<<"存在键值为1的元素"<<endl;
	}
	//cout<first<second<
	mp.clear();//清空容器 
	cout<<mp.size()<<endl;
}

map排序

当元素为结构体时自定义排序

包含文件加山#include ,不然cout<<右输出报错

//当元素为结构体时自定义排序 
#include   
#include      
#include  
#include 
using namespace std; 
struct Info 
{ 
 string name; 
 float score; 
 //重载"<"操作符,自定义排序规则 
 bool operator < (const Info &a) const 
 { 
 if(score==a.score)
 return name>a.name;
 return score>a.score; 
 } 
}; 
int main(int argc, char* argv[]) 
{ 
 
 map<Info,int> m; 
 Info info; 
 info.name="Jack"; 
 info.score=60; 
 m[info]=25; 
 info.name="Tom";
 info.score=60;
 m[info]=30;
 info.name="Bomi"; 
 info.score=80; 
 m[info]=10; 
 info.name="Peti"; 
 info.score=66.5; 
 m[info]=30;  
 map<Info,int>::iterator it; 
 for(it=m.begin();it!=m.end();it++) 
 { 
 cout<<(*it).second<<" : "; 
 cout<<((*it).first).name<<" "<<((*it).first).score<<endl; 
 } 
 return 0; 
} 

感谢大佬,整理的很有条理,转载自:
https://blog.csdn.net/love20165104027/article/details/81515466

你可能感兴趣的:(C++map容器基本操作大全(定义插入删除遍历清空查找排序))