[C++]-map 映射

map用来存储排序后的由键和值组成的项的集合。键必须唯一,不同的键可以对应同一个值,在map中键保持逻辑排序后的顺序(以键为标准)。

代码

#include<iostream>
#include<map>
#include<string>
using namespace std;

inline void print_map(map<string, double> m)
{
	for(map<string, double>::iterator it = m.begin(); it != m.end(); ++it) // it指向一个二元组 
		cout << it->first << ": " << it->second << endl; cout << endl;
	/**
	for(auto x : m)
		cout << x.first << ": " << x.second << endl; cout << endl;
	*/
}

int main()
{
	map<string, double> mymap; // 默认是小于比较器less<string> 
	
	cout << "-----插入------" << endl;
	mymap.insert(pair<string, double>("xxm", 1.1));
	mymap.insert(make_pair("mqg", 2.2));
	mymap.insert(map<string, double>::value_type("lpp", 3.3)); 
	mymap["zhx"] = 4.4;
	print_map(mymap); 
	
	cout << "-----通过键获取元素值------" << endl;
	// 直接索引
	// 通过索引直接获取对应的值,不存在键sjx,则返回double无参构造函数赋值为0 
	cout << mymap["xxm"] << " " << mymap["sjx"] << endl; 
	// 由于刚才 mymap["sjx"]语句,现在mymap中多了一个键值对mymap["sjx"]=0 
	// for循环遍历 
	print_map(mymap);
		
	cout << "----- 判断是否存在某个键------" << endl;
	map<string, double>::iterator it1 = mymap.find("xxm"); // 存在,返回对应的迭代器 
	if(it1 == mymap.end())
		cout << "不存在该键" << endl;
	else
		cout << it1->second << endl; 
	map<string, double>::iterator it2 = mymap.find("xxxxm"); // 不存在,返回mymap.end() 
	if(it2 == mymap.end())
		cout << "不存在该键" << endl;
	else
		cout << it2->second << endl; 
	cout << endl; 
	
	cout << "-----删除------" << endl;
	mymap.erase("xxm"); // 删除键为xxm的键值对 
	mymap.erase(++mymap.begin()) ; // 删除第二个元素 
	print_map(mymap);
	mymap.erase(mymap.begin(), mymap.end()); // 删除[mymap.begin(), mymap.end())区间的元素
	if(mymap.empty()) cout << "mymap已空" << endl;
	mymap.clear(); // 直接将映射内容全部清空
} 

运行结果

-----插入------
lpp: 3.3
mqg: 2.2
xxm: 1.1
zhx: 4.4

-----通过键获取元素值------
1.1 0
lpp: 3.3
mqg: 2.2
sjx: 0
xxm: 1.1
zhx: 4.4

----- 判断是否存在某个键------
1.1
不存在该键

-----删除------
lpp: 3.3
sjx: 0
zhx: 4.4

mymap已空
posted @ 2020-07-31 19:12  世纪小小孟  阅读(299)  评论(0编辑  收藏  举报