【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;
} 
相关推荐
郝学胜-神的一滴27 分钟前
Qt 入门 01-02: 开发环境搭建指南
开发语言·c++·qt·客户端
Languorous.30 分钟前
C++数据结构高阶|布隆过滤器(Bloom Filter)深度解析:从原理到手写实现,面试高频考点全覆盖
数据结构·c++·面试
山河木马1 小时前
Emscripten 从 C/C++ 调用 JavaScript
前端·javascript·c++
TANGLONG2221 小时前
【C++】继承详解——基类/派生类、作用域、默认函数、菱形继承(超详细)
java·c语言·c++·经验分享·笔记·ajax
小侯不躺平.1 小时前
C++ Boost库【2】 --stringalgo字符串算法
linux·c++·算法
code_whiter1 小时前
C++11(stack和queue)
开发语言·c++
用户805533698032 小时前
现代Qt开发教程(新手篇)2.1——QPainter 绘图基础
c++·qt
计算机安禾2 小时前
【c++面向对象编程】第12篇:继承(二):构造与析构顺序,继承中的构造函数
开发语言·c++
雪度娃娃2 小时前
结构型设计模式——享元模式
c++·设计模式·享元模式
TIEM_692 小时前
C++string|遍历、模拟实现、赋值拷贝现代写法
开发语言·c++