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
    评论
在 C 语言,没有直接的内建数据结构来实现类似于 C++ 的 `map`(关联数组)或 `std::map`(有序关联数组)的功能。不过,你可以通过使用自定义的数据结构和排序算法来实现类似的功能。 一种常见的方法是使用数组或链表来实现关联数组,然后对数组或链表进行排序。你可以使用标准库的排序函数(例如 `qsort`)或自己实现排序算法,如冒泡排序或插入排序。 以下是一个使用数组和简单的冒泡排序来实现关联数组排序的示例代码: ```c #include <stdio.h> #include <string.h> typedef struct { int key; int value; } KeyValuePair; void bubbleSort(KeyValuePair arr[], int n) { for (int i = 0; i < n - 1; i++) { for (int j = 0; j < n - i - 1; j++) { if (arr[j].key > arr[j + 1].key) { KeyValuePair temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; } } } } int main() { KeyValuePair data[] = { {3, 30}, {1, 10}, {2, 20} }; int n = sizeof(data) / sizeof(data[0]); bubbleSort(data, n); printf("Sorted array:\n"); for (int i = 0; i < n; i++) { printf("Key: %d, Value: %d\n", data[i].key, data[i].value); } return 0; } ``` 这个示例使用 `KeyValuePair` 结构体来表示关联数组的元素,其 `key` 表示键,`value` 表示值。通过冒泡排序算法对 `data` 数组的元素按照键进行排序,并输出排序后的结果。 请注意,这只是一个简单的示例,实际使用时你可能需要根据自己的需求进行适当的修改和扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值