【C++】STL 容器 - map 关联容器 ④ ( map 容器常用 api 操作 | 查找指定元素 | 获取元素个数 | 获取大于等于指定键的元素 | 获取大于指定键的元素 | 获取等于指定键 )

C/C++
169
0
0
2024-03-12
文章目录
  • 一、查找指定元素 - std::map#find() 函数
  • 1、函数原型简介
  • 2、代码示例
  • 二、获取元素个数 - std::map#count() 函数
  • 1、函数原型简介
  • 2、代码示例
  • 三、获取大于等于指定键的元素 - std::map#lower_bound 函数
  • 1、函数原型简介
  • 2、代码示例
  • 四、获取大于指定键的元素 - std::map#upper_bound 函数
  • 1、函数原型简介
  • 2、代码示例
  • 五、获取等于指定键的元素 - std::map#equal_range 函数
  • 1、函数原型简介
  • 2、代码示例

一、查找指定元素 - std::map#find() 函数

1、函数原型简介

在 C++ 语言 的 标准模板库 ( STL , Standard Template Library ) 中 , std::map 关联容器类 提供了 find() 成员函数 , 用于 查找容器中是否存在具有特定键 的元素 , 函数原型如下 :

iterator find(const Key& key);  
  • 参数解析 : find() 函数接受一个 键 Key 作为参数 ;
  • 返回值解析 :如果 在 map 容器中 找到了该键 , 会 返回一个指向该 键 所在 pair 对组元素 的迭代器 ;
  • 如果 在 map 容器中 没有找到 该键 , 则 返回指向容器末尾的迭代器 , 该迭代器指向 容器中最后一个值的后面位置 , 不可取值 ;

2、代码示例

代码示例 :

#include "iostream"
using namespace std;
#include "map"

int main() {

    map<string, int> myMap;
    myMap["Tom"] = 18;
    myMap["Jerry"] = 12;

    // 使用 find() 查找元素  
    //      如果找到了元素, 则返回指向元素的迭代器
    //      如果没找到元素, 则返回末尾迭代器 end()
    map<string, int>::iterator it = myMap.find("Tom");

    // 判定是否找到了 Tom 键
    if (it != myMap.end()) {
        // 找到了元素  
        cout << "找到元素: " << it->first << "\t" << (*it).second << endl;
    }
    else {
        // 没找到元素  
        cout << "没有找到元素" << endl;
    }

	// 控制台暂停 , 按任意键继续向后执行
	system("pause");

	return 0;
};

执行结果 :

找到元素: Tom 18 Press any key to continue . . .

在这里插入图片描述

二、获取元素个数 - std::map#count() 函数

1、函数原型简介

在 std::map 关联容器 中 , 提供了 count() 成员函数 , 用于 统计容器中具有特定 键 Key 的元素的数量 ;

std::map 容器中 每个 键 Key 都是唯一的 , 因此 count() 函数对于 std::map 来说实际上 只能 返回 1 ( 找到了该键 Key ) 或 0 ( 没有找到该键 Key ) ;

std::map#count() 函数原型如下 :

size_type count(const Key& key) const;
  • 参数解析 : Key 是 std::map 中元素的键类型 , 这里 接收一个 键 类型的引用 ;
  • 返回值解析 : size_type 是一个无符号整数类型 , 用于 表示容器中元素的数量 ;

2、代码示例

代码示例 :

#include "iostream"
using namespace std;
#include "map"

int main() {

    map<int, string> myMap;

	myMap[1] = "Tom";

	// 统计 1 键值的个数 
	cout << myMap.count(1) << endl;

	// 控制台暂停 , 按任意键继续向后执行
	system("pause");

	return 0;
};

执行结果 :

1 Press any key to continue . . .

在这里插入图片描述

三、获取大于等于指定键的元素 - std::map#lower_bound 函数

1、函数原型简介

在 C++ 语言 的 标准模板库 ( STL , Standard Template Library ) 中 , std::map 关联容器类 提供了 lower_bound() 成员函数 , 该函数返回一个迭代器 , 指向在 有序映射 中第一个 键 Key 大于等于 给定键值的元素 ; 如果映射中不存在这样的键 Key , 则返回 尾部迭代器 ;

std::map#lower_bound 函数原型 :

iterator lower_bound(const Key& key); 
  • 参数解析 : 参数 是 键 Key 的值 ;
  • 返回值解析 : 返回一个迭代器 , 指向在 有序映射 中第一个 键 Key 大于等于 给定键值的元素 ;

2、代码示例

代码示例 :

#include "iostream"
using namespace std;
#include "map"

int main() {

    map<int, string> myMap;

	myMap[1] = "Blue";
	myMap[2] = "Red";
	myMap[4] = "Green";
	myMap[5] = "Black";
	myMap[6] = "White";

	// 使用lower_bound() 查找第一个键 大于等于 2 的元素  
	map<int, string>::iterator it = myMap.lower_bound(2);

	if (it != myMap.end()) {
		// 找到了元素  
		std::cout << "第一个大于等于 2 的元素 : " << it->first << "\t" << it->second << std::endl;
	}
	else {
		// 没找到元素  
		std::cout << "没有找到大于等于 2 的元素" << std::endl;
	}


	// 控制台暂停 , 按任意键继续向后执行
	system("pause");

	return 0;
};

执行结果 :

第一个大于等于 2 的元素 : 2 Red Press any key to continue . . .

在这里插入图片描述

四、获取大于指定键的元素 - std::map#upper_bound 函数

1、函数原型简介

在 C++ 语言 的 标准模板库 ( STL , Standard Template Library ) 中 , std::map 关联容器类 提供了 upper_bound() 成员函数 , 该函数返回一个迭代器 , 指向在 有序映射 中第一个 键 Key 大于 给定键值的元素 ; 如果映射中不存在这样的键 Key , 则返回 尾部迭代器 ;

std::map#upper_bound 函数原型 :

iterator upper_bound(const Key& key); 
  • 参数解析 : 参数 是 键 Key 的值 ;
  • 返回值解析 : 返回一个迭代器 , 指向在 有序映射 中第一个 键 Key 大于 给定键值的元素 ;

2、代码示例

代码示例 :

#include "iostream"
using namespace std;
#include "map"

int main() {

    map<int, string> myMap;

	myMap[1] = "Blue";
	myMap[2] = "Red";
	myMap[4] = "Green";
	myMap[5] = "Black";
	myMap[6] = "White";

	// 使用lower_bound() 查找第一个键 大于 4 的元素  
	map<int, string>::iterator it = myMap.lower_bound(4);

	if (it != myMap.end()) {
		// 找到了元素  
		std::cout << "第一个大于 4 的元素 : " << it->first << "\t" << it->second << std::endl;
	}
	else {
		// 没找到元素  
		std::cout << "没有找到大于 4 的元素" << std::endl;
	}


	// 控制台暂停 , 按任意键继续向后执行
	system("pause");

	return 0;
};

执行结果 :

第一个大于 4 的元素 : 4 Green Press any key to continue . . .

在这里插入图片描述

五、获取等于指定键的元素 - std::map#equal_range 函数

1、函数原型简介

std::map 关联容器 类 提供了 equal_range() 成员函数 , 可以 在 有序映射 中查找等于给定键值的元素范围 , 并返回表示该 范围 的迭代器对 , 该范围是一个 前闭后开区间 ;

由于 std::map 中的 每个 键 Key 都是唯一的 , 因此 equal_range() 实际上返回的范围最多只包含一个元素 ;

在 std:multimap 中 , 该函数才有实际意义 ;

std::map#equal_range() 函数原型 :

std::pair<iterator, iterator> equal_range(const Key& key);  
  • 参数解析 : Key 是 std::map 中元素的键类型 , 这里 接收一个 键 类型的引用 ;
  • 返回值解析 : 返回值类型是 std::pair<iterator, iterator> , 其中两个迭代器分别指向 等于给定键 Key 的 范围的开始迭代器 ( 包含该迭代器指向的元素 ) 和 结束迭代器 ( 不包含该迭代器指向的元素 ) ;

2、代码示例

代码示例 :

#include "iostream"
using namespace std;
#include "map"

int main() {

    map<int, string> myMap;

	myMap[1] = "Blue";
	myMap[2] = "Red";
	myMap[4] = "Green";
	myMap[5] = "Black";
	myMap[6] = "White";

	// 使用equal_range() 查找 等于 4 的元素范围  
	pair<map<int, string>::iterator, map<int, string>::iterator> its = myMap.equal_range(4);

	if (its.first != myMap.end()) {
		// 找到了元素  
		std::cout << "找到了等于 4 的元素 : " << its.first->first << "\t" << its.first->second << std::endl;
	}
	else {
		// 没找到元素  
		std::cout << "没有找等于 4 的元素" << std::endl;
	}


	// 控制台暂停 , 按任意键继续向后执行
	system("pause");

	return 0;
};

执行结果 :

找到了等于 4 的元素 : 4 Green Press any key to continue . . .

在这里插入图片描述