c++ 容器map

本文介绍了C++ STL中的map容器基本特点及其使用方法,包括构造函数、插入、遍历和删除等操作,并展示了如何自定义比较函数。

1map的基本特点:

mapSTL的一个容器,和set一样,map也是一种关联式容器。它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能力,由于这个特性,有助于我们处理一对一数据。这里说下map内部数据的组织,map内部是自建一颗红黑树(一种非严格意义上的平衡二叉树),这颗树具有对数据自动排序的功能,所以在map内部所有的数据都是有序的。

mapset的区别:

对于map中的每个节点存储的是一对信息,包括一个键和一个值,各个节点之间的键值不能重复。

对于set中的每个节点存储的是一个信息,只有一个键,但是每个键值也是唯一的。set表示的是集合的概念。

 

2map基本方法:

#include<map>
#include<string>
#include<iostream>

using namespace std;

struct mycomp {
	bool operator () (const int &a, const int &b) {
		return a > b;
	}
};

int main()
{
	//构造函数
	/*map(); // 默认构造函数
    map(const map& m) // 拷贝构造函数
	map(iterator begin, iterator end ); //区间构造函数
	map(iterator begin, iterator end, const traits& _compare) //带比较谓词的构造函数
	map(iterator begin, iterator end, const traits& _compare, const allocator& all) //带分配器
    */
	map<int, string> m1;

	//插入方法
	m1.insert(pair<int, string>(1, "a"));//方法一:pair
	m1.insert(pair<int, string>(1, "A"));//重复,不插入
	m1.insert(map<int, string>::value_type(2, "b"));//方法二:map<>::value_type
	m1.insert(map<int, string>::value_type(2, "B"));//重复,不插入
	m1[3] = "c";//方法三:利用数组插入
	m1[3] = "C";//重复,替换

	m1.insert(pair<int, string>(4, "f"));
	m1.insert(pair<int, string>(5, "e"));

	//遍历方法
	map<int, string>::iterator it = m1.begin();
	for (it; it != m1.end(); it++) {
		cout << "key = " << it->first << " ; value = " << it->second << endl;
	}

	//删除
	m1.erase(4);//
	map<int, string>::iterator it1 = m1.begin();
	map<int, string>::iterator it2 = m1.find(3);
	m1.erase(it1, it2);
	
	it = m1.begin();
	for (it; it != m1.end(); it++) {
		cout << "key = " << it->first << " ; value = " << it->second << endl;
	}

	//自定义比较函数
	map<int, string, mycomp> m2;
	m2.insert(pair<int, string>(1, "a"));
	m2.insert(pair<int, string>(2, "b"));
	m2.insert(pair<int, string>(3, "c"));
	m2.insert(pair<int, string>(4, "d"));
	m2.insert(pair<int, string>(5, "e"));
	m2.insert(pair<int, string>(6, "f"));
	it = m2.begin();
	for (it; it != m2.end(); it++) {
		cout << "key = " << it->first << " ; value = " << it->second << endl;
	}
    return 0;
}


评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值