在补CF周赛时发现dalao用了一个 tie函数和tuple类型,表示没怎么接触,现在稍微学习记录一下。

tuple 即元组,可以理解为pair的扩展,可以用来将不同类型的元素存放在一起,常用于函数的多返回值。

定义与初始化

tuple可以使用初始化列表进行赋值。

tuple<int,double,string> t3 = {1, 2.0, "3"};

std::tie: 创建左值引用的 tuple,或将 tuple 解包为独立对象

返回值

含左值引用的 std::tuple 对象。

注意

std::tie 可用于解包 std::pair ,因为 std::tuple 拥有从 pair 的转换赋值

示例

std::tie 能用于引入字典序比较到结构体,或解包 tuple :

#include <iostream>
#include <set>
#include <string>
#include <tuple> struct S {
int n;
std::string s;
float d;
bool operator<(const S& rhs) const {
// 比较 n 与 rhs.n,
// 然后为 s 与 rhs.s,
// 然后为 d 与 rhs.d
return std::tie(n, s, d) < std::tie(rhs.n, rhs.s, rhs.d);
}
}; int main() {
std::set<S> set_of_s; // S 为可比较小于 (LessThanComparable) S value{42, "Test", 3.14};
std::set<S>::iterator iter;
bool inserted; // 解包 insert 的返回值为 iter 与 inserted
std::tie(iter, inserted) = set_of_s.insert(value); if (inserted)
std::cout << "Value was inserted successfully\n";
}

结果如下:

Value was inserted successfully

std::tie会将变量的引用整合成一个tuple,从而实现批量赋值。

int i;
double d;
string s; tie(i, d, s) = t3; cout << i << " " << d << " " << s << endl;

会输出4 2 3

如下例子摘自http://www.cplusplus.com/reference/tuple/tie/

// packing/unpacking tuples
#include <iostream> // std::cout
#include <tuple> // std::tuple, std::make_tuple, std::tie
int main() {
int myint; char mychar; std::tuple<int, float, char> mytuple; mytuple = std::make_tuple(10, 2.6, 'a'); // packing values into tuple std::tie(myint, std::ignore, mychar) =
mytuple; // unpacking tuple into variables std::cout << "myint contains: " << myint << '\n'; std::cout << "mychar contains: " << mychar << '\n'; return 0;
}

输出:

myint contains: 10
mychar contains: a

std::ignore介绍:

任何值均可赋给而无效果的未指定类型的对象。目的是令 std::tie 在解包 std::tuple 时作为不使用的参数的占位符使用。

示例

解包 set.insert() 所返回的 pair ,但只保存布尔值。

#include <iostream>
#include <string>
#include <set>
#include <tuple> int main()
{
std::set<std::string> set_of_str;
bool inserted = false;
std::tie(std::ignore, inserted) = set_of_str.insert("Test");
if (inserted) {
std::cout << "Value was inserted successfully\n";
}
}

结果如下:

Value was inserted successfully

C++函数:std::tie 详解的更多相关文章

  1. C++11 并发指南五(std::condition_variable 详解)

    前面三讲<C++11 并发指南二(std::thread 详解)>,<C++11 并发指南三(std::mutex 详解)>分别介绍了 std::thread,std::mut ...

  2. C++11 并发指南------std::thread 详解

    参考: https://github.com/forhappy/Cplusplus-Concurrency-In-Practice/blob/master/zh/chapter3-Thread/Int ...

  3. C++11 并发指南三(std::mutex 详解)

    上一篇<C++11 并发指南二(std::thread 详解)>中主要讲到了 std::thread 的一些用法,并给出了两个小例子,本文将介绍 std::mutex 的用法. Mutex ...

  4. C++11 并发指南五(std::condition_variable 详解)(转)

    前面三讲<C++11 并发指南二(std::thread 详解)>,<C++11 并发指南三(std::mutex 详解)>分别介绍了 std::thread,std::mut ...

  5. C++11 并发指南三(std::mutex 详解)(转)

    转自:http://www.cnblogs.com/haippy/p/3237213.html 上一篇<C++11 并发指南二(std::thread 详解)>中主要讲到了 std::th ...

  6. 【转】C++11 并发指南五(std::condition_variable 详解)

    http://www.cnblogs.com/haippy/p/3252041.html 前面三讲<C++11 并发指南二(std::thread 详解)>,<C++11 并发指南三 ...

  7. 【C/C++开发】C++11 并发指南三(std::mutex 详解)

    本系列文章主要介绍 C++11 并发编程,计划分为 9 章介绍 C++11 的并发和多线程编程,分别如下: C++11 并发指南一(C++11 多线程初探)(本章计划 1-2 篇,已完成 1 篇) C ...

  8. (八)open函数的flag详解

    3.1.4.open函数的flag详解13.1.4.1.读写权限:O_RDONLY O_WRONLY O_RDWR(1)linux中文件有读写权限,我们在open打开文件时也可以附带一定的权限说明(譬 ...

  9. 节点地址的函数list_entry()原理详解

    本节中,我们继续讲解,在linux2.4内核下,如果通过一些列函数从路径名找到目标节点. 3.3.1)接下来查看chached_lookup()的代码(namei.c) [path_walk()> ...

  10. JS中的函数节流throttle详解和优化

    JS中的函数节流throttle详解和优化在前端开发中,有时会为页面绑定resize事件,或者为一个页面元素绑定拖拽事件(mousemove),这种事件有一个特点,在一个正常的操作中,有可能在一个短的 ...

随机推荐

  1. Ingress & Ingress Controller & API Gateway

    Ingress Ingress 内部服务如何暴露给集群外部访问 使用NodePort类型的service 将k8s集群中的服务暴露给集群外部访问,最简单的方式就是使用NodePort,类似在docke ...

  2. jdk10的var局部变量类型推理

    注:本人参考了openjdk官网,由于openjdk是开源的,所以不存在侵权行为,本章只为学习,我觉得没有什么比官网更具有话语权 1.jdk10的var的类型推测:就是这种处理将仅限于具有初始值设定项 ...

  3. SpringCore完整学习教程5,入门级别

    本章从第6章开始 6. JSON Spring Boot提供了三个JSON映射库的集成: Gson Jackson JSON-B Jackson是首选的和默认的库. 6.1. Jackson 为Jac ...

  4. spring报错

    C:\Users\dell\.jdks\openjdk-19.0.2\bin\java.exe "-javaagent:E:\idea图片\IntelliJ IDEA 2022.2.3\li ...

  5. 年度盘点,四年的精华合集「GitHub 热点速览」

    今年是 GPT 年,无论是 GitHub 还是朋友圈还是技术平台,即便你不关心 GPT 的发展情况,同大模型.AI 相关的项目总能进入你的信息流.到这期为止,热度速览也连载了四年,从一开始习惯看 Gi ...

  6. 华企盾DSC苹果电脑-认证用户提示“不是认证成功的账户”

    出现该问题说明客户端连不上服务器,一般来说是网络原因,可按照下面方法排查 ​ 1.先检查网络是否通能否正常上网或者换一个网络试试 2.查看服务器是否启动 3.客户测试连接是否成功端口是否填成了5580 ...

  7. 华企盾DSC客户端无法连接以及无法切换工作模式常见处理方法

    先查看客户端日志见文档<客户端连接服务器问题和加密进程初步判断>常见的 1.检查客户端连接服务器配置是否正确 2.telnet服务器的IP和端口是否通 3.客户端日志中显示client i ...

  8. iMessage群发,iMessage群发基础知识,iMessage群发源代码分享

    在当今的数字化时代,即时通讯已经成为我们日常生活和工作中不可或缺的一部分,其中,苹果的iMessage服务因其出色的用户体验和无缝的设备间同步而备受用户喜爱. 然而,你是否想过如何利用iMessage ...

  9. 2024-01-06:用go语言,在河上有一座独木桥,一只青蛙想沿着独木桥从河的一侧跳到另一侧 在桥上有一些石子,青蛙很讨厌踩在这些石子上 由于桥的长度和青蛙一次跳过的距离都是正整数 我们可以把独木桥

    2024-01-06:用go语言,在河上有一座独木桥,一只青蛙想沿着独木桥从河的一侧跳到另一侧 在桥上有一些石子,青蛙很讨厌踩在这些石子上 由于桥的长度和青蛙一次跳过的距离都是正整数 我们可以把独木桥 ...

  10. 开源:Taurus.DTC 微服务分布式事务框架,支持 .Net 和 .Net Core 双系列版本

    前言: 在经过1年多的深思,十几年的框架编写技术沉淀下,花了近一个月的时间,终于又为 .Net 及 .Net Core 的微服务系列框架贡献当中的一个重要组件. 1.开源地址: https://git ...