亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Industrial programming >> C语言

带有打印示例的 C++ 标准模板库 (STL) 中的映射

什么是std::map?

在 C++ 中,一个 MAP 是以映射形式存储项目的关联容器。 map 中的每个 item 都由 key-value 和一个映射的 value 组成。两个映射值不能共享相同的键值。

键值有利于唯一地对元素进行排序和标识。映射值用于存储与键关联的内容。两者在类型上可能不同,但成员类型通过将两者结合的 pair 类型将它们结合起来。

在本 C++ 教程中,您将学习:

为什么要使用 std::map?

以下是使用地图的原因:

语法:

要声明 std::map,请使用以下语法:

std::map<key_datatype, value_datatype>map_name; 

例如:

map<string, int> my_map; 

我们声明了一个名为 my_map 的地图。地图将有一个字符串作为 key 数据类型和整数作为 数据类型。

会员类型:

成员函数可以使用以下成员类型作为参数或返回类型:

内置函数

std::map 带有内置函数。其中包括:

遍历地图元素

您可以遍历地图元素。我们只需要创建一个迭代器并将其用于此目的。
例如:

示例 1:

#include <iostream>
#include <string>
#include <map> 

using namespace std;
int main() {

	map<int, string> Students;

	Students.insert(std::pair<int, string>(200, "Alice"));

	Students.insert(std::pair<int, string>(201, "John"));

	cout << "Map size is: " << Students.size() << endl;

	cout << endl << "Default map Order is: " << endl;

	for (map<int, string>::iterator it = Students.begin(); it != Students.end(); ++it) {

		cout << (*it).first << ": " << (*it).second << endl;
	}
}

输出:

下面是代码截图:

代码说明:

  1. 将 iostream 头文件包含到我们的代码中以使用其功能。
  2. 将字符串头文件包含到我们的代码中以使用其功能。
  3. 将地图头文件包含到我们的代码中以使用其功能。
  4. 将 std 命名空间包含到我们的代码中,以便在不调用它的情况下使用它的类。
  5. 调用 main() 函数。 { 标志着函数体的开始。
  6. 创建一个名为 Students 的映射,其中键是整数,值是字符串。
  7. 将值插入地图学生。 200 的键和 Alice 的值将被插入到映射中。
  8. 将值插入地图学生。键 201 和值 John 将被插入到映射中。
  9. 使用 size() 函数获取名为 Student 的地图的大小。这应该返回 2。
  10. 在控制台上打印一些文本。
  11. 使用 for 循环创建一个名为 it 的迭代器,以迭代名为 Student 的地图元素。
  12. 在控制台上打印地图学生的值。
  13. for 循环主体的结尾。
  14. main() 函数主体的结尾。

在 std::map 中插入数据

您可以使用 insert() 函数将项目输入到 std::map 中。请记住,std::map 键必须是唯一的。

因此,它首先检查每个键是否存在于地图中。如果存在,则不会插入该条目,但它会返回现有条目的迭代器。如果不存在,则插入该条目。

该函数有以下变体:

insert_or_assing() 函数的工作方式与 insert() 函数相同,但如果给定的 key 已经存在于 map 中,则其值将被修改。

示例 2:

#include <map>
#include <iostream>

using namespace std;

int main() {

	map<int, int> m{ {1,3} , {2,4} , {3,5} };

	m.insert({ 5, 6 });
	m.insert({ 1, 8 });

	m.insert_or_assign(1, 6);  
	
	cout << "Key\tElement\n";
	for (auto itr = m.begin(); itr != m.end(); ++itr) {
		cout << itr->first << '\t' << itr->second << '\n';
	}
	return 0;
}

输出:

下面是代码截图:

代码说明:

  1. 将地图头文件包含到我们的代码中以使用其功能。
  2. 将 iostream 头文件包含到我们的代码中以使用其功能。
  3. 将 std 命名空间包含到我们的代码中,以便在不调用它的情况下使用它的类。
  4. 调用 main() 函数。 { 标志着函数体的开始。
  5. 创建一个名为 m 的映射,其中键是整数,值是整数。地图中添加了三个条目。
  6. 在地图 m 中插入一个新条目。键 5 和值 6 将被插入到地图中。
  7. 试图输入一个已经存在的键。由于映射中已经存在键 1,因此不会进行输入。
  8. 使用 insert_or_assign() 函数插入或修改现有条目。由于键 1 已经存在,其值将更改为 6。
  9. 在控制台上打印一些文本。 “\t”字符创建一个水平空间,而“\n”字符将鼠标光标移动到下一行。
  10. 使用 for 循环创建一个名为 itr 的迭代器,以遍历名为 m 的映射的元素。
  11. 在控制台上打印地图 m 的值。 “\t”字符在每个键与其对应的值之间创建一个水平空间。相反,“\n”字符在每次迭代后将鼠标光标移动到下一行。
  12. for 循环体的结尾。
  13. 程序必须在成功完成后返回值。
  14. main() 函数主体的结尾。

在地图中搜索

我们可以使用 find() 函数通过键在地图中搜索元素。如果未找到该键,则该函数返回 std::map::end。否则,将返回被搜索元素的迭代器。

示例 2:

#include <iostream>
#include <string>
#include <map> 
using namespace std;
int main() {
	map<int, string> Students;
	Students.insert(std::pair<int, string>(200, "Alice"));
	Students.insert(std::pair<int, string>(201, "John"));
	std::map<int, string>::iterator it = Students.find(201);
	if (it != Students.end()) {
		std::cout << endl << "Key 201 has the value: => "<< Students.find(201)->second << '\n';
	}
}

输出:

下面是代码截图:

代码说明:

  1. 将 iostream 头文件包含到我们的代码中以使用其功能而不会出错。
  2. 将字符串头文件包含到我们的代码中以使用其功能而不会出错。
  3. 将地图头文件包含到我们的代码中以使用其功能而不会出错。
  4. 将 std 命名空间包含到我们的代码中,以便在不调用它的情况下使用它的类。
  5. 调用 main() 函数。 { 标志着 main() 函数体的开始。
  6. 创建一个名为 Students 的映射,其键是整数和值字符串。
  7. 将值插入地图学生。 200 的键和 Alice 的值将被插入到映射中。
  8. 将值插入地图学生。键 201 和值 John 将被插入到映射中。
  9. 查找与键 201 关联的值。
  10. 使用 if 语句检查是否找到了键的值。
  11. 在控制台上打印键的值以及一些文本。
  12. if 语句主体的结尾。
  13. main() 函数主体的结尾。

从地图中删除数据

我们可以使用 erase() 函数从地图中删除一个值。我们只需创建一个指向要删除的元素的迭代器。然后将迭代器传递给 erase() 函数。

示例 3:

#include <iostream>
#include <string>
#include <map>

using namespace std;
int main() {

	map<std::string, int> my_map;

	my_map.insert(std::make_pair("cow", 1));

	my_map.insert(std::make_pair("cat", 2));

	my_map["lion"] = 3;

	map<std::string, int>::iterator it = my_map.find("cat");

	my_map.erase(it);

	for (map<string, int>::iterator it = my_map.begin(); it != my_map.end(); ++it)

		cout << (*it).first << ": " << (*it).second << endl;

  return 0;
}

输出:

下面是代码截图:

代码说明:

  1. 将 iostream 头文件包含到我们的代码中以使用其功能。
  2. 将字符串头文件包含到我们的代码中以使用其功能。
  3. 将地图头文件包含到我们的代码中以使用其功能。
  4. 将 std 命名空间包含到我们的代码中,以便在不调用它的情况下使用它的类。
  5. 调用 main() 函数。 { 标志着 main() 函数主体的开始。
  6. 创建一个名为 my_map 的映射,其键是字符串,值是整数。
  7. 将值插入地图 my_map。 Cow 的键和 1 的值将被插入到地图中。
  8. 将值插入地图 my_map。 Cat 的键和 2 的值将被插入到地图中。
  9. 将值 3 添加到带有狮子键的映射 my_map 中。
  10. 创建一个迭代器来遍历地图 my_map 以寻找关键的猫。
  11. 删除迭代器指向的元素。
  12. 使用迭代器从头到尾遍历地图 my_map 的元素。
  13. 在控制台打印出地图 my_map 的内容。
  14. 程序必须在成功完成后返回输出。
  15. main() 函数主体的结尾。

总结:


C语言

  1. C 标准库函数
  2. C++ 中的运算符示例:什么是、类型和程序
  3. C++ do...while 循环与示例
  4. 带有示例的 C++ Switch Case 语句
  5. C++ 动态分配数组的例子
  6. 带有示例的 C++ 指针
  7. 带有示例的 C++ 运算符重载
  8. C++ 结构与示例
  9. C++ 中的 std::list 示例
  10. 带有程序示例的 C++ 函数
  11. 结构和类的区别:用 C++ 示例解释
  12. 带有程序示例的 C 库中的 calloc() 函数