mapmultimap容器

mapmultimap容器,第1张

map/multimap容器 map/multimap容器

map基本概念

  • map中所有元素都是pair(成对)
  • pair中第一个元素为key(键值),起到索引作用,第二个元素为value,是实值。
  • 所有元素按照元素的键值自动排序
  • 本质 : map/multimap属于关联式容器,底层实现通过二叉树实现
  • 优点:可以通过key值找到value值

map和multimap区别:

  • map不允许容器中有重复的key值元素
  • multimap允许有重复key值元素

map构造和赋值
功能描述:

  • 对map容器进行构造和赋值 *** 作

构造:

  • map mp; //map默认构造
  • map(const map &mp); //拷贝构造

赋值

  • map& operator = (const map &mp);//重载等号 *** 作符

示例

#include
#include 
using namespace std;
void printMap(map& m)
{
	for (map::iterator it = m.begin(); it != m.end(); it++)
	{
		cout << "Key = " << (*it).first << "value = " << it->second << endl;
	}
	cout << endl;
}
void test01()
{
	map m;
	m.insert(pair(1, 10));
	m.insert(pair(2, 20));
	m.insert(pair(3, 10));
	m.insert(pair(4, 40));
	m.insert(pair(5, 300));
	printMap(m);

	map m2(m); //拷贝构造
	printMap(m2);

	map m3;
	m3 = m; //赋值
	printMap(m3);
}

int main()
{
	test01();
	system("pause");
}

map大小和交换 *** 作
功能描述:

  • 统计map容器的大小以及交换map容器

    函数:

  • size(); //返回容器中元素的个数

  • empty(); //判断容器是否为空

  • swap(); //交换两个集合容器

#include
#include
using namespace std;
void printMap(map& m)
{
	for (auto it = m.begin(); it != m.end(); it++)
	{
		cout << "Key = " << it->first << "   value = " << it->second << endl;
	}
}

void test01()
{
	map m;
	m.insert(pair(1, 20));
	cout << "size = "< m2;
	m2.insert(pair(2, 30));
	m.swap(m2);
	printMap(m);
	printMap(m2);
}
int main()
{
	test01();
	system("pause");
}

map容器插入和删除
函数:

  • insert(elem);//插入元素
  • clear();//清除所有元素
  • erase(pos);//删除迭代器所指的元素,返回下一个元素的迭代器。
  • erase(beg,end);//删除区间[beg,end]的所有元素,返回下一个元素的迭代器
    -erase(key);//删除容器中值为key的元素
    示例:
#include
#include
using namespace std;
void printMap(map& m)
{
	for (auto it = m.begin(); it != m.end(); it++)
	{
		cout << "Key = " << it->first << "   value = " << it->second << endl;
	}
	cout << endl;
}

void test01()
{
	map m;
	m.insert(pair(1, 20));
	m.insert(pair(5, 50));//插入的第一种方式
	m.insert(make_pair(6, 60));//插入的第二种方式
	m.insert(map::value_type(7, 70));//插入的第三种方式
	m[8] = 40;//插入的第四种方式 不建议用。例如我cout< 

map查找和统计 *** 作
函数:

  • find(key);//查找key是否存在,若存在,返回该键的元素的迭代器;若不存在,返回set.end();
  • count(key);//统计key元素的个数
    示例:
#include
#include
using namespace std;

void test01()
{
	map m;
	m.insert(pair(1, 20));
	m.insert(pair(2, 30));
	m.insert(pair(3, 20));
	
	auto pos = m.find(3);//查找键为3的数据
	if (pos == m.end())
	{
		cout << "3没查找到" << endl;
	}
	else
		cout << "3找到了" << endl;
	pos = m.find(4);//查找键为4的数据
	if (pos == m.end())
	{
		cout << "4没查找到" << endl;
	}
	else
		cout << "4找到了" << endl;
	cout << "查找键值个数 = " << m.count(3)<< endl;//注意:map容器不允许插入相同键值数据
}
int main()
{
	test01();
	system("pause");
}

注意:multimap可以插入多个相同键值数据,在查找的时候可以是多个。

map容器排序
注意:

  • map容器排序默认是key从小到大排列,要掌握如何改变排序规则
  • 利用仿函数,改变排序规则
#include
#include
using namespace std;
class MyCompare //仿函数
{
public:
	bool operator()(int v1, int v2)
	{
		//降序
		return v1 > v2;
	}
};
void printMap(map & m)
{
	for (auto it = m.begin(); it != m.end(); it++)
	{
		cout << "key = " << it->first << "   value = " << it->second;
		
	}
	cout << endl;
}

void test01()
{
	map m;
	m.insert(pair(1, 20));
	m.insert(pair(2, 30));
	m.insert(pair(3, 20));
	m.insert(pair(4, 50));
	printMap(m);
}
int main()
{
	test01();
	system("pause");
}

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5580420.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-14
下一篇 2022-12-14

发表评论

登录后才能评论

评论列表(0条)

保存