文章目录
- 一、pair 对组
- 1、pair 对组 简介
- 2、pair 对组元素访问
- 3、代码示例 - pair 对组
- 4、set 集合容器存储 pair 对组元素
- 二、set 集合容器 insert 插入结果类型 - pair 对组
- 1、std::set#insert 函数原型分析
- 2、代码示例 - std::set#insert 函数插入元素结果分析
一、pair 对组
1、pair 对组 简介
在 C++ 语言 标准模板库 ( STL , Standard Template Library ) 中 , std::set 集合容器 中 包含一组唯一的元素 , 并且元素在容器中是自动排序的 ;
默认情况下,std::set 集合容器 使用 < 运算符 对元素进行排序 , 如果 元素类型 没有重载 < 运算符 , 则必须在 <>
类型中 , 设置 仿函数 排序规则 ;
pair 对组 可以将两个值 封装成 一个单元 ;
std::pair 是 C++ 语言 标准模板库 中的一个模板类 , 该类的主要作用是 将两个 不同类型 或 相同类型 的对象 组合成一个 对组 ;
该 对组 对象 可以作为一个单独的元素进行存储和操作 ;
std::pair 常常在需要使用两个相关联的值时非常有用 , 比如在关联容器 , 如 : std::map 和 std::set 中 ;
使用 pair 对组前 , 需要先导入 <utility>
头文件 ;
#include <utility>
2、pair 对组元素访问
pair<T1, T2>
对组中 存放的两个类型的值 , 这两个类型可以不一样 , 如 T1 值的类型为 int , T2 值的类型为 float ; T1 和 T2 的类型也可以是自定义类型 ;
- 调用 std::pair 的 .first 值 , 访问对组的第一个值 ;
- 调用 std::pair 的 .second 值 , 访问对组的第二个值 ;
3、代码示例 - pair 对组
代码示例 :
#include "iostream"
using namespace std;
#include "set"
int main() {
// 定义 pair 对组对象
pair<int, string> myPair = { 666, "Tom"};
// 访问 pair 对组的两个值
cout << "< " << myPair.first << " , " << myPair.second << " >" << endl;
// 控制台暂停 , 按任意键继续向后执行
system("pause");
return 0;
};
执行结果 :
< 666 , Tom >
Press any key to continue . . .
4、set 集合容器存储 pair 对组元素
当需要在 std::set 集合容器 中存储两个相关联的值时 , 可以使用 std::pair 对组值 作为 set 集合容器中的元素 ;
std::pair 对组是一个模板类 , 用于存储两个可能不同类型的对象作为一对 ;
它可以作为 std::set 的元素类型 , 以便在单个集合中同时存储两个相关的值 ;
代码示例 :
#include "iostream"
using namespace std;
#include "set"
int main() {
// 创建一个 set 容器
// 元素类型为 pair<int, string>
set<pair<int, string>> mySet;
// 向 set 容器插入元素
mySet.insert({ 9, "Green" });
mySet.insert({ 5, "Red" });
mySet.insert({ 2, "Yellow" });
mySet.insert({ 7, "White" });
// 遍历 set 容器并打印 pair 元组元素
for (const auto& element : mySet) {
cout << "<" << element.first << " , " << element.second << ">" << endl;
}
// 控制台暂停 , 按任意键继续向后执行
system("pause");
return 0;
};
执行结果 :
<2 , Yellow>
<5 , Red>
<7 , White>
<9 , Green>
Press any key to continue . . .
二、set 集合容器 insert 插入结果类型 - pair 对组
1、std::set#insert 函数原型分析
调用 set 集合容器的 insert 函数 , 向 set 容器中插入元素 , 返回一个 pair 对组对象 ,
函数原型如下 :
template <bool _Multi2 = _Multi, enable_if_t<!_Multi2, int> = 0>
pair<iterator, bool> insert(value_type&& _Val) {
const auto _Result = _Emplace(_STD move(_Val));
return {iterator(_Result.first, _Get_scary()), _Result.second};
}
insert 函数返回值是一个对组类型的值 , pair<iterator, bool>
;
- 第一个值是 迭代器 , 指向插入的元素 ;
- 第二个值是 是否插入成功 , 如果为 true 说明插入成功 , 如果为 false 说明插入失败 ;
2、代码示例 - std::set#insert 函数插入元素结果分析
创建一个 set 集合容器 , 该容器中存储 int 类型元素 ;
// 创建一个 set 容器
set<int> mySet;
调用 std::set#insert 函数 , 向该 set 容器中插入元素 , 返回一个 pair<iterator, bool> 类型的对组 ; 该对组的第一个值是迭代器 , 迭代器类型是 set<int>::iterator 类型 , 第二个值是 bool 值 ;
// 向 set 容器插入元素
pair<set<int>::iterator, bool> myPair = mySet.insert(9);
完整代码示例 :
#include "iostream"
using namespace std;
#include "set"
#include "utility"
int main() {
// 创建一个 set 容器
set<int> mySet;
// 向 set 容器插入元素
pair<set<int>::iterator, bool> myPair = mySet.insert(666);
// 根据对组的第二个值判定插入是否成功
if (myPair.second == true){
cout << "插入元素成功" << endl;
} else {
cout << "插入元素失败" << endl;
}
// 遍历 set 容器并打印 pair 元组元素
for (const auto& element : mySet) {
cout << element << endl;
}
// 控制台暂停 , 按任意键继续向后执行
system("pause");
return 0;
};
执行结果 :
插入元素成功
666
Press any key to continue . . .