0
点赞
收藏
分享

微信扫一扫

C++ --STL之map和multimap容器

半秋L 2022-04-13 阅读 131

文章目录

map和multimap容器

  • 前言:
  • map中的元素都是key=value对
  • 元素会自动根据key来排序,同样是通过二叉树实现的
  • 优点:可通过key值快速找到value值
    在这里插入图片描述

一、map容器构造和赋值

  • operator=
  • 默认构造,拷贝构造
//map容器构造和赋值
//operator=
#include <map>
void traversingMap(map<int, char>& m)
{
	for (map<int, char>::iterator it = m.begin(); it != m.end(); it++)
	{
		cout << it->first << " " << it->second << endl;
	}
}
void test()
{
	map<int, char> m1;					//默认构造
	m1.insert(pair<int, char>(97, 'a'));
	m1.insert(pair<int, char>(100, 'd'));
	m1.insert(pair<int, char>(98, 'b'));
	traversingMap(m1);
	map<int, char> m2(m1);			//拷贝构造
	map<int, char> m3 = m1;			//operator=赋值
	traversingMap(m2);
	traversingMap(m3);
}
int main()
{
	test();
	return 0;
}

二、map容器的大小和交换

  • size
  • empty,
  • swap
map容器的大小和交换
size, empty, swap

三、map容器插入和删除

  • insert
  • erase
  • clear
//map插入和删除
//insert, erase, clear
#include <map>
void traversingMap(map<int, char>& m)
{
	for (map<int, char>::iterator it = m.begin(); it != m.end(); it++)
	{
		cout << it->first << " " << it->second << endl;
	}
	cout << endl;
}
void test()
{
	map<int, char> m1;
	m1.insert(pair<int, char>(97, 'a'));
	m1.insert(make_pair(98, 'b'));
	m1.insert(map<int, char>::value_type(100, 'd'));
	traversingMap(m1);
	//删除
	map<int, char> m2 = m1;
	m2.erase(m2.begin());			//也可以是一个迭代区间 m2.erase(m2.begin, --m2.end())
	traversingMap(m2);
	m2.erase(100);				//指定key值来进行删除
	traversingMap(m2);
	m2.clear();
}
int main()
{
	test();
	return 0;
}

四、map容器查找和统计

  • find
  • count
//map容器的查找和统计
//find, count
void test()
{
	map<int, char> m1;
	m1.insert(make_pair(97, 'a'));
	m1.insert(make_pair(99, 'c'));
	m1.insert(pair<int, char>(98, 'b'));
	traversingMap(m1);
	if (m1.find(97) == m1.end())
		cout << "没找到\n";
	else
		cout << "找到了\n";
	int num = m1.count(98);
	cout << num << endl;
}
int main()
{
	test();
	return 0;
}

五、修改map容器默认排序规则

  • sort
//修改map容器默认排序规则
//和set类似,map容器默认排序规则也是从小到大(按照key值),利用一个仿函数来修改排序规则
#include <map>
class reverseSort
{
public:
	bool operator()(int v1, int v2) const
	{
		return v1 > v2;
	}
};
void traversingMap(map<int, char>& m)
{
	for (map<int, char>::iterator it = m.begin(); it != m.end(); it++)
	{
		cout << it->first << " " << it->second << endl;
	}
	cout << endl;
}
void test()
{
	map<int, char> m1;
	m1.insert(make_pair(97, 'a'));
	m1.insert(map<int, char>::value_type(101, 'e'));
	m1.insert(pair<int, char>(98, 'b'));
	traversingMap(m1);
	map<int, char, reverseSort> m2;
	m2.insert(make_pair(97, 'a'));
	m2.insert(map<int, char>::value_type(101, 'e'));
	m2.insert(pair<int, char>(98, 'b'));
	for (map<int, char>::iterator it = m2.begin(); it != m2.end(); it++)
	{
		cout << it->first << " " << it->second << endl;
	}
	cout << endl;
}
int main()
{
	test();
	return 0;
}
举报

相关推荐

0 条评论