【C++】STL 容器 - set 集合容器 ⑥ ( pair 对组简介 | pair 对组元素访问 | set 集合容器 insert 插入结果类型 - pair 对组 )






一、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 . . .

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/han1202012/article/details/135297720