栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++中map算法介绍

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++中map算法介绍

概念总结:

  • map的用法和Python中字典的用法是类似的。
  • Map是关联容器,按照特定的顺序存储由key和value值组合而成的元素。
  • key:常用于对元素进行排序和唯一标识
  • 自动建立key-value的对应。key和value可以是任意需要的类型
  • 容器中没有两个元素具有相同的key
#include
#include
#include
using namespace std;

int main()
{
	map person;  // 创建一个map对象

	// 赋值操作1: key = 0 ; value = lewis01,以该方式插入如果键值重复则新值覆盖旧值
	person[0] = "lewis0";
	person[0] = "lewis10";

	// 以下面的方式插入,如果键值重复则插不进去
	person.insert(pair(1, "lewis1"));

	person.insert(map::value_type(2, "lewis2"));
	person.insert(map::value_type(2, "lewis3"));


	// 读取map中的内容
	map::iterator it;
	for (it = person.begin(); it != person.end(); it++)
	{
		cout << it->first << ":" << it->second << endl;
	}

	// 查找元素
	map::iterator it1;
	it1 = person.find(6);		// 寻找key为6的键值对
	if (it1 != person.end())	// 如果没有找到则返回person.end()
	{
		cout << it1->second << endl;
	}
	else
	{
		cout << "not found" << endl;
	}

	 // 删除元素方法1:利用跌倒器
	map::iterator it2;
	it2 = person.find(1);
	person.erase(it2);
	// 删除元素方法1:利用键值
	person.erase(2);
	map::iterator it3;
	for (it3 = person.begin(); it3 != person.end(); it3++)
	{
		cout << it3->first << ":" << it3->second << endl;
	}

	cout << "------------------------------------" << endl;
	// key和value都用string
	map person2;
	// 增
	person2["0"] = "nihoa0";
	person2["1"] = "nihoa1";
	person2["2"] = "nihoa2";
	person2["3"] = "nihoa3";
	person2["4"] = "nihoa4";
	person2.insert(pair("5", "nihoa5"));

	person2.insert(map::value_type("6", "nihoa6"));
	person2.insert(map::value_type("6", "nihoa7"));
	// 删
	map::iterator it5;
	it5 = person2.find("3");
	if (it5 != person2.end())
	{
		person2.erase(it5);
	}
	person2.erase("2");
	
	// 改
	person2["1"] = "Hello";

	map::iterator it4;
	for (it4 = person2.begin(); it4 != person2.end(); it4++)
	{
		cout << it4->first << ":" << it4->second << endl;
	}
	// 查
	map::iterator it6;
	it6 = person2.find("5");
	if (it6 != person2.end())
	{
		cout << it6->second << endl;
	}
}
map与multiamp的用法和区别:
  1. map只允许Key与value一一对应
  2. multiple中的一个key可以对应多个value
map与unordered_map的用法和区别

map的优点:

  • map是有序的(根据key值排序)
  • 基于红黑树实现,查找的时间复杂度是O(n)

map的缺点:

  • 空间占有率比较高:因为内部实现了红黑树,虽然提高了运行效率,但是每个节点都要保存父亲节点和孩子节点和红黑树的性质,使得每一个节点都占用大量的空间。

unordered_map优点:

  • 内部是用哈希表来实现的,所以查找效率非常高

unordered_map缺点:

  • 哈希表的建立比较费时
适用情况
  • 对于要有序的结构使用map比较好
  • 对于查找问题,使用unordered_map比较好
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1033187.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号