C++中map算法介绍

概念总结:

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

int main()
{
	map<int, string> person;  // 创建一个map对象

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

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

	person.insert(map<int, string>::value_type(2, "lewis2"));
	person.insert(map<int, string>::value_type(2, "lewis3"));


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

	// 查找元素
	map<int, string>::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<int, string>::iterator it2;
	it2 = person.find(1);
	person.erase(it2);
	// 删除元素方法1:利用键值
	person.erase(2);
	map<int, string>::iterator it3;
	for (it3 = person.begin(); it3 != person.end(); it3++)
	{
		cout << it3->first << ":" << it3->second << endl;
	}

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

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

	map<string, string>::iterator it4;
	for (it4 = person2.begin(); it4 != person2.end(); it4++)
	{
		cout << it4->first << ":" << it4->second << endl;
	}
	// 查
	map<string, string>::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比较好
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值