文章目录
- 一、查找指定元素 - 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 . . .