C++ map用法

map是关联容器,它按照特定的次序(按照key来比较)存储由键值key和值value组合而成的元
素。
在map中,键值key通常用于排序和惟一地标识元素,而值value中存储与此键值key关联的
内容。键值key和值value的类型可能不同,并且在map的内部,key与value通过成员类型
value_type绑定在一起,为其取别名称为pair:
typedef pair<const key, T> value_type; std::pair template <class T1,class T2> struct pair; std::make_pair 构造一个匿名的pair返回
在内部,map中的元素总是按照键值key进行比较排序的。
map中通过键值访问单个元素的速度通常比unordered_map容器慢,但map允许根据顺序
对元素进行直接迭代(即对map中的元素进行迭代时,可以得到一个有序的序列)。
map支持下标访问符,即在[]中放入key,就可以找到与key对应的value。
map通常被实现为二叉搜索树(更准确的说:平衡二叉搜索树(红黑树))。

map构造

map<int, double> m1; //构造一个key为int类型,value为double类型的空容器
map<int, double> m2(m1); //拷贝构造
map<int, double> m3(m2.begin(), m2.end()); //利用迭代器拷贝构造
map<int, double, greater<int>> m4; //按int降序排序

map的插入

m.insert(pair<int, string>(2, "two"));

或者

m.insert(make_pair(2, "two"));

insert的返回值也是一个pair对象,pair中第一个成员类型是插入的map的迭代器类型,第二个成员类型是bool类型

bool类型的作用如下

  • 若待插入元素的键值key在map当中不存在,则insert函数插入成功,并返回插入后元素的迭代器和true。
  • 若待插入元素的键值key在map当中已经存在,则insert函数插入失败,并返回map当中键值为key的元素的迭代器和false。

map其他常用成员函数

m.erase(3); // 3 为key
m.find(4); // 返回key=4的迭代器,否则返回m.end()。
map<int, string>::iterator pos = m.find(4);

可以这样用
if (pos != m.end())
	{
		m.erase(pos);
	}
    //获取容器中元素的个数
	cout << m.size() << endl; 

	//容器中key值为2的元素个数
	cout << m.count(2) << endl; 

	//清空容器
	m.clear();

	//容器判空
	m.empty();

	//交换两个容器中的数据
    map<int, string> m;
	map<int, string> tmp;
	m.swap(tmp);

map的迭代器相关函数

成员函数功能
begin返回map中起始位置元素的迭代器
end返回map中最后一个元素后面的迭代器
rbegin返回map第一个元素的反向迭代器
rend

返回map最后一个元素下一个位置的反向迭代器

 操作

    // 正向迭代器遍历
	map<int, string>::iterator it = m.begin();
	while (it != m.end())
	{
		cout << it->first << "-" << it->second << endl;
		it++;
	}

	// 反向迭代器遍历
	map<int, string>::reverse_iterator it2 = m.rbegin();
	while (it2 != m.rend())
	{
		cout << it2->first << "-" << it2->second << endl;
		it2++;
	}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值