一、tie和ignore

std::tie和std::ignore都是定义在< tuple >这个头文件中的,意思其实就很明了了,它肯定是辅助tuple这个数据结构的,先看一下它们的具体定义:
具体的定义:

//Defined in header <tuple>
const /*unspecified*/ ignore;
(since C++11)
(until C++17)
inline constexpr /*unspecified*/ ignore;
(since C++17)template< class... Types >
std::tuple<Types&...> tie( Types&... args ) noexcept;
(since C++11)
(until C++14)
template< class... Types >
constexpr std::tuple<Types&...> tie( Types&... args ) noexcept;
(since C++14)

std::tie其实是“Creates a tuple of lvalue references to its arguments or instances of std::ignore.”利用参数或者std::ignore创建一个元组的左值引用,它可以用来对tuple的解包或者引入相关的字典排序数据。而std::ignore其实就类似于Go或者其它语言中的忽略元素,起到一个点位符的作用。

二、例程

说还是没有什么说服力,看看简单的例程就会明白这两个数据结构的用法:

#include <iostream>
#include <string>
#include <set>
#include <tuple>struct S {int n;std::string s;float d;bool operator<(const S& rhs) const{// compares n to rhs.n,// then s to rhs.s,// then d to rhs.dreturn std::tie(n, s, d) < std::tie(rhs.n, rhs.s, rhs.d);}
};int main()
{std::set<S> set_of_s; // S is LessThanComparableS value{42, "Test", 3.14};std::set<S>::iterator iter;bool inserted;// unpacks the return value of insert into iter and insertedstd::tie(iter, inserted) = set_of_s.insert(value);if (inserted)std::cout << "Value was inserted successfully\n";
}

再看看ignore的例程:

#include <iostream>
#include <string>
#include <set>
#include <tuple>[[nodiscard]] int dontIgnoreMe()
{return 42;
}int main()
{std::ignore = dontIgnoreMe();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";}
}

"nodiscard"的意思是说这个返回值是需要应用的,不能舍弃的,换句话说,如果这个函数的返回值没有被使用,编译器会发出警告。set_of_str.insert()这个函数需要注意的是可能返回std::pair也可能返回其它,而这里正好是使用pair到tie的转换,然后忽略了返回的迭代器,而只关心成功与否。前面提到过,pair可以理解成tuple的特殊情况,这样对上面这个例程就会很清晰的理解了。而std::ignore可以根据实际情况对返回的相关tuple的内容进行选择性的忽略,这就是它的优势所在。

三、总结

其实越深入发现STL中的内容,有好多东西都已经写好,不用自己在编程时再进行处理。可实际情况可以说各种环境都有,程序员对STL的掌握和应用的熟练程度也不尽相同,这就导致有些STL封装好的数据结构和算法其实是没有用到。这还得需要根据自己的实际情况来取舍,能省点事儿,省点儿还是好的。
努力要从今日始!

c++中的ignore和tie相关推荐

  1. svn中的ignore

    首先,svn GUI菜单右键的ignore功能,写的模模糊糊,网上也没啥人给出清晰的解释,stackoverflow推荐用命令行控制 SVN有3中方法配置ignore 1.配置文件 C:\Users\ ...

  2. 语法:MySQL中INSERT IGNORE INTO和REPLACE INTO的使用

    mysql中insert into和replace into以及insert ignore用法区别:  mysql中常用的三种插入数据的语句:  insert into表示插入数据,数据库会检查主键, ...

  3. MySQL中INSERT IGNORE INTO和REPLACE INTO的使用

    mysql中insert into和replace into以及insert ignore用法区别:  mysql中常用的三种插入数据的语句:  insert into表示插入数据,数据库会检查主键, ...

  4. android tools ignore,android 中tools:ignore=UselessParent这个属性的含义是什么?

    满意答案 zjpx456 2018.03.05 采纳率:53%    等级:12 已帮助:7021人 这个属性是给lint检查工具看的,这个告诉IDE 以避免显示这样一条消息: "此 Rel ...

  5. c++ 标准库中 cin.ignore()

    cin.ignore()函数是C++标准输入流(cin)中的一个方法.cin.ignore()函数中有两个参数,分别为数值型的a 和 字符型的 ch ,即cin.ignore( a, ch ).它表示 ...

  6. sql中的ignore语句_MySQL insert ignore语句

    在本教程中,您将学习如何使用MySQL INSERT IGNORE语句将数据插入到表中. 1. MySQL INSERT IGNORE语句简介 当使用INSERT语句向表中添加一些行数据并且在处理期间 ...

  7. 关于C++中cin.ignore()的问题

    实际上你在每次输入数据的时候会输入一个回车 '\n' cin在读入整数时候会忽略空白碰到非数字('\n')时停止 cin在getline时会把'\n'及之前的内容读回来,哪怕是空行也会读入 cin在读 ...

  8. mysql ignore用法_mysql insert 语句中的 ignore 关键字的作用

    IGNORE:表明,如果你插入的行已经存在,则成功返回,不会报错(会有警告),忽略当前插入的记录,不使用IGNORE时,如果插入了相同的行数据时,MySQL则会报错. MySQL是通过主键来判断两个行 ...

  9. IDEA中配置.ignore来忽略version control以及commit的部分文件

    1.下载.ignore插件  https://plugins.jetbrains.com/idea/plugin/7495–ignore (注意对应idea版本) Install plugin fro ...

最新文章

  1. 识别User Agent屏蔽一些Web爬虫防采集
  2. 《公安机关互联网安全监督检查规定》今日起实施,要检查你家的数据中心了...
  3. 【转】gdb 调试段错误
  4. SAP 电商云 Spartacus UI 单元测试的依赖隔离设置举例
  5. 【APIO2016】Fireworks【闵可夫斯基和】【凸包向量和】【可并堆】
  6. python成长之路第三篇(2)_正则表达式
  7. QTP鼠标点击和浏览器事件的动态切换
  8. 你真的了解Android ViewGroup的draw和onDraw的调用时机吗
  9. python基础之错误、调试(异常处理)
  10. TCP/IP详解 卷一笔记
  11. 如何听懂画外音-《用事实说话》:听懂“暗语”,让沟通透明化
  12. python+FTP 批量上传文件
  13. 【eNSP 华为模拟器】三层交换技术及操作步骤【图文】
  14. Rhino学习教程——1.2
  15. Win11更新提示安装错误0x80248007怎么办?0x80248007下载错误解决方法汇总
  16. 京东关闭骚扰电话和广告推送
  17. 拍摄高质量数码照片的三条原则:安全快门、低感光度、最佳光圈
  18. BZOJ3837: [Pa2013]Filary
  19. 终于学完了阿里P8架构师7年心血整理总结的微服务实战文档
  20. 计算机单机取证(autopsy工具使用)

热门文章

  1. 四边形围栅栏c语言长度,不同结构围油栏拦油特性数值的研究.pdf
  2. 在OpenCV中使用Mask R-CNN
  3. Arduino上手动添加开发板
  4. Bootstrap系列之卡片(Cards)
  5. 《实用VC编程之玩转控件》第3课:Button按钮控件
  6. Arduino旋转编码器
  7. 电化学气体传感器的工作原理
  8. Docker-搭建私有仓浅谈
  9. 不学习AJAX,我可以做得更好
  10. R语言dplyr包使用group_by函数和summarise函数构建频率表实战