【C++】map/multimap容器

1.map基本概念

2.map构造和赋值

cpp 复制代码
#include <iostream>
using namespace std;

//map容器 构造和赋值
#include<map>

//遍历输出map容器
void printMap(const map<int, int>& m)
{
	for (map<int, int>::const_iterator it = m.begin(); it != m.end(); it++)
	{
		cout << "key = " << (*it).first << "value = " << it->second << endl;
	}
	cout << endl;
}

void test01()
{
	//创建map容器
	map<int, int>m;

	//按照key值自动排序
	m.insert(pair<int, int>(1, 10));
	m.insert(pair<int, int>(3, 30));
	m.insert(pair<int, int>(2, 20));
	m.insert(pair<int, int>(4, 40));
	printMap(m);

	//拷贝构造
	map<int, int>m2(m);
	printMap(m2);

	//赋值
	map<int, int>m3;
	m3 = m2;
	printMap(m3);
}

int main()
{
	test01();
	//cout << "-------------" << endl << endl;
	//test02();

	//**************************************
	system("pause");
	return 0;
} 

3.map大小和交换

cpp 复制代码
#include <iostream>
using namespace std;

//map容器 大小和交换
#include<map>

void printMap(map<int, int>& m)
{
	for (map<int, int>::iterator it = m.begin(); it != m.end(); it++)
	{
		cout << "key = " << (*it).first << "    value = " << it->second << endl;
	}
	cout << endl;
}

//大小
void test01()
{
	map<int, int>m;
	m.insert(pair<int, int>(1, 10));
	m.insert(pair<int, int>(3, 30));
	m.insert(pair<int, int>(2, 20));

	if (m.empty())
	{
		cout << "m为空!" << endl;
	}
	else
	{
		cout << "size of m : " << m.size() << endl;
	}
}

//交换
void test02()
{
	map<int, int>m;
	m.insert(pair<int, int>(1, 10));
	m.insert(pair<int, int>(3, 30));
	m.insert(pair<int, int>(2, 20));

	map<int, int>m2;
	m2.insert(pair<int, int>(4, 100));
	m2.insert(pair<int, int>(6, 300));
	m2.insert(pair<int, int>(5, 200));

	cout << "交换前:" << endl;
	printMap(m);
	printMap(m2);

	//m与m2交换
	m.swap(m2);
	cout << "交换后:" << endl;
	printMap(m);
	printMap(m2);
}

int main()
{
	test01();
	cout << "-------------" << endl << endl;
	test02();

	//**************************************
	system("pause");
	return 0;
} 

4.map插入和删除


cpp 复制代码
#include <iostream>
using namespace std;

//map容器 插入和删除
#include<map>

void printMap(map<int, int>& m)
{
	for (map<int, int>::iterator it = m.begin(); it != m.end(); it++)
	{
		cout << "key = " << (*it).first << "  value = " << it->second << endl;
	}
	cout << endl;
}

void test01()
{
	//创建map容器
	map<int, int>m;

	//插入
	//第一种
	m.insert(pair<int, int>(1, 10));

	//第二种
	m.insert(make_pair(2, 20));

	//第三种
	m.insert(map<int, int>::value_type(3, 30));

	//第四种
	m[4] = 40;

	//[]不建议插入, []其用途 可以利用可以访问到value
	//cout << m[5] <<endl; //输出了" key = 5   value = 0 "
	printMap(m);

	//删除
	m.erase(m.begin());
	printMap(m);

	m.erase(3); //按照key删除
	printMap(m);

	//清空
	m.erase(m.begin(), m.end());
	m.clear();
	printMap(m);
}

int main()
{
	test01();
	//cout << "-------------" << endl << endl;
	//test02();

	//**************************************
	system("pause");
	return 0;
} 

5.map查找和统计


cpp 复制代码
#include <iostream>
using namespace std;

//map容器 查找和统计
#include<map>
void test01()
{
	//查找
	map<int, int>m;
	m.insert(make_pair(1, 10));
	m.insert(make_pair(3, 30));
	m.insert(make_pair(2, 20));
	m.insert(make_pair(2, 40)); // 不能插入重复元素(以key为标准)


	map<int, int>::iterator pos = m.find(3);

	if (pos != m.end())
	{
		cout << "找到了该元素  key = " << (*pos).first << " value = " << pos->second << endl;
	}
	else
	{
		cout << "no find this element" << endl;
	}

	//统计
	//map不允许插入重复元素, count统计而言 结果只能是0或1
	//multimap的count统计可能大于1
	int num = m.count(2);
	cout << "num = " << num << endl;
}

int main()
{
	test01();
	//cout << "-------------" << endl << endl;
	//test02();

	//**************************************
	system("pause");
	return 0;
} 

6.map容器排序


cpp 复制代码
#include <iostream>
using namespace std;

//map容器 排序
#include<map>

class MyCompare
{
public:
	bool operator()(int v1, int v2) const
	{
		return v1 > v2; // 降序
	}
};

void test01()
{
	//默认从小到大排序
	//利用仿函数实现从小到大排序
	map<int, int, MyCompare> m;
	m.insert(make_pair(1, 10));
	m.insert(make_pair(3, 30));
	m.insert(make_pair(2, 20));

	for (map<int, int, MyCompare>::iterator it = m.begin(); it != m.end(); it++)
	{
		cout << "key = " << it->first << "   value = " << it->second << endl;
	}
}

int main()
{
	test01();
	//cout << "-------------" << endl << endl;
	//test02();

	//**************************************
	system("pause");
	return 0;
} 
相关推荐
Yusei_05232 分钟前
Redis核心特性与应用全解析
开发语言·数据库·c++·redis·缓存
Larry_Yanan8 小时前
Qt多进程(一)进程间通信概括
开发语言·c++·qt·学习
J ..9 小时前
C++ 多线程编程基础与 std::thread 使用
c++
你的冰西瓜9 小时前
C++标准模板库(STL)全面解析
开发语言·c++·stl
闻缺陷则喜何志丹10 小时前
【计算几何】仿射变换与齐次矩阵
c++·数学·算法·矩阵·计算几何
chen_ever10 小时前
Protobuf详解(从安装到实战)
c++·rpc·信息与通信
hmbbcsm10 小时前
python做题小记(八)
开发语言·c++·算法
再睡一夏就好10 小时前
深入Linux线程:从轻量级进程到双TCB架构
linux·运维·服务器·c++·学习·架构·线程
特立独行的猫a11 小时前
C++开发中的Pimpl机制与类声明机制深度解析:现代C++的编译解耦艺术
开发语言·c++·pimpl
GoWjw11 小时前
在C&C++指针的惯用方法
c语言·开发语言·c++