上传cppreference
This commit is contained in:
@@ -0,0 +1,326 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="zh" dir="ltr" class="client-nojs" xmlns="http://www.w3.org/1999/xhtml" xml:lang="zh">
|
||||
<head><meta http-equiv="x-ua-compatible" content="ie=edge">
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
<title>operator==,!=,<,<=,>,>=,<=>(std::tuple)</title>
|
||||
<link rel="stylesheet" href="ext.css" />
|
||||
<link rel="stylesheet" href="site_modules.css" />
|
||||
</head>
|
||||
<body class="mediawiki ltr sitedir-ltr ns-0 ns-subject page-cpp_utility_tuple_operator_cmp skin-cppreference2 action-view cpp-navbar">
|
||||
<div id="cpp-content-base">
|
||||
<div id="content"><a id="top"></a>
|
||||
<h1 id="firstHeading" class="firstHeading">operator==,!=,<,<=,>,>=,<=><small>(std::tuple</small>)</h1>
|
||||
<div id="bodyContent">
|
||||
<div id="contentSub"><span class="subpages">< <a href="cpp.html">cpp</a>‎ | <a href="cpp-utility.html">utility</a>‎ | <a href="cpp-utility-tuple.html">tuple</a></span></div>
|
||||
<div id="mw-content-text" lang="zh" dir="ltr" class="mw-content-ltr" xml:lang="zh">
|
||||
<table class="t-dcl-begin">
|
||||
<tbody>
|
||||
<tr class="t-dsc-header">
|
||||
<td>
|
||||
<div>定义于头文件 <code><a href="cpp-header-tuple.html"><tuple></a></code></div>
|
||||
</td>
|
||||
<td></td>
|
||||
<td></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
<tbody class="t-dcl-rev t-dcl-rev-num">
|
||||
<tr class="t-dcl-rev-aux">
|
||||
<td></td>
|
||||
<td rowspan="142">(1)</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr class="t-dcl t-since-cxx11 t-until-cxx14">
|
||||
<td>
|
||||
<div><span class="mw-geshi cpp source-cpp"><span class="kw1">template</span><span class="sy1"><</span> <span class="kw1">class</span>... <span class="me1">TTypes</span>, <span class="kw1">class</span>... <span class="me1">UTypes</span> <span class="sy1">></span><br /></span>
|
||||
<p><span class="kw4">bool</span> operator<span class="sy1">==</span><span class="br0">(</span> <span class="kw4">const</span> <a href="cpp-utility-tuple.html"><span class="kw1098">std::<span class="me2">tuple</span></span></a><span class="sy1"><</span>TTypes...<span class="sy1">></span><span class="sy3">&</span> lhs,<br /></p>
|
||||
<span class="kw4">const</span> <a href="cpp-utility-tuple.html"><span class="kw1098">std::<span class="me2">tuple</span></span></a><span class="sy1"><</span>UTypes...<span class="sy1">></span><span class="sy3">&</span> rhs <span class="br0">)</span><span class="sy4">;</span></div>
|
||||
</td>
|
||||
<td class="t-dcl-nopad"></td>
|
||||
<td><span class="t-mark-rev t-since-cxx11">(C++11 起)</span><br />
|
||||
<span class="t-mark-rev t-until-cxx14">(C++14 前)</span></td>
|
||||
</tr>
|
||||
<tr class="t-dcl t-since-cxx14">
|
||||
<td>
|
||||
<div><span class="mw-geshi cpp source-cpp"><span class="kw1">template</span><span class="sy1"><</span> <span class="kw1">class</span>... <span class="me1">TTypes</span>, <span class="kw1">class</span>... <span class="me1">UTypes</span> <span class="sy1">></span><br /></span>
|
||||
<p><span class="kw4">constexpr</span> <span class="kw4">bool</span> operator<span class="sy1">==</span><span class="br0">(</span> <span class="kw4">const</span> <a href="cpp-utility-tuple.html"><span class="kw1098">std::<span class="me2">tuple</span></span></a><span class="sy1"><</span>TTypes...<span class="sy1">></span><span class="sy3">&</span> lhs,<br /></p>
|
||||
<span class="kw4">const</span> <a href="cpp-utility-tuple.html"><span class="kw1098">std::<span class="me2">tuple</span></span></a><span class="sy1"><</span>UTypes...<span class="sy1">></span><span class="sy3">&</span> rhs <span class="br0">)</span><span class="sy4">;</span></div>
|
||||
</td>
|
||||
<td class="t-dcl-nopad"></td>
|
||||
<td><span class="t-mark-rev t-since-cxx14">(C++14 起)</span></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
<tbody></tbody>
|
||||
<tbody class="t-dcl-rev t-dcl-rev-num">
|
||||
<tr class="t-dcl-rev-aux">
|
||||
<td></td>
|
||||
<td rowspan="142">(2)</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr class="t-dcl t-since-cxx11 t-until-cxx14">
|
||||
<td>
|
||||
<div><span class="mw-geshi cpp source-cpp"><span class="kw1">template</span><span class="sy1"><</span> <span class="kw1">class</span>... <span class="me1">TTypes</span>, <span class="kw1">class</span>... <span class="me1">UTypes</span> <span class="sy1">></span><br /></span>
|
||||
<p><span class="kw4">bool</span> operator<span class="sy3">!</span><span class="sy1">=</span><span class="br0">(</span> <span class="kw4">const</span> <a href="cpp-utility-tuple.html"><span class="kw1098">std::<span class="me2">tuple</span></span></a><span class="sy1"><</span>TTypes...<span class="sy1">></span><span class="sy3">&</span> lhs,<br /></p>
|
||||
<span class="kw4">const</span> <a href="cpp-utility-tuple.html"><span class="kw1098">std::<span class="me2">tuple</span></span></a><span class="sy1"><</span>UTypes...<span class="sy1">></span><span class="sy3">&</span> rhs <span class="br0">)</span><span class="sy4">;</span></div>
|
||||
</td>
|
||||
<td class="t-dcl-nopad"></td>
|
||||
<td><span class="t-mark-rev t-since-cxx11">(C++11 起)</span><br />
|
||||
<span class="t-mark-rev t-until-cxx14">(C++14 前)</span></td>
|
||||
</tr>
|
||||
<tr class="t-dcl t-since-cxx14 t-until-cxx20">
|
||||
<td>
|
||||
<div><span class="mw-geshi cpp source-cpp"><span class="kw1">template</span><span class="sy1"><</span> <span class="kw1">class</span>... <span class="me1">TTypes</span>, <span class="kw1">class</span>... <span class="me1">UTypes</span> <span class="sy1">></span><br /></span>
|
||||
<p><span class="kw4">constexpr</span> <span class="kw4">bool</span> operator<span class="sy3">!</span><span class="sy1">=</span><span class="br0">(</span> <span class="kw4">const</span> <a href="cpp-utility-tuple.html"><span class="kw1098">std::<span class="me2">tuple</span></span></a><span class="sy1"><</span>TTypes...<span class="sy1">></span><span class="sy3">&</span> lhs,<br /></p>
|
||||
<span class="kw4">const</span> <a href="cpp-utility-tuple.html"><span class="kw1098">std::<span class="me2">tuple</span></span></a><span class="sy1"><</span>UTypes...<span class="sy1">></span><span class="sy3">&</span> rhs <span class="br0">)</span><span class="sy4">;</span></div>
|
||||
</td>
|
||||
<td class="t-dcl-nopad"></td>
|
||||
<td><span class="t-mark-rev t-since-cxx14">(C++14 起)</span><br />
|
||||
<span class="t-mark-rev t-until-cxx20">(C++20 前)</span></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
<tbody></tbody>
|
||||
<tbody class="t-dcl-rev t-dcl-rev-num">
|
||||
<tr class="t-dcl-rev-aux">
|
||||
<td></td>
|
||||
<td rowspan="142">(3)</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr class="t-dcl t-since-cxx11 t-until-cxx14">
|
||||
<td>
|
||||
<div><span class="mw-geshi cpp source-cpp"><span class="kw1">template</span><span class="sy1"><</span> <span class="kw1">class</span>... <span class="me1">TTypes</span>, <span class="kw1">class</span>... <span class="me1">UTypes</span> <span class="sy1">></span><br /></span>
|
||||
<p><span class="kw4">bool</span> operator<span class="sy1"><</span><span class="br0">(</span> <span class="kw4">const</span> <a href="cpp-utility-tuple.html"><span class="kw1098">std::<span class="me2">tuple</span></span></a><span class="sy1"><</span>TTypes...<span class="sy1">></span><span class="sy3">&</span> lhs,<br /></p>
|
||||
<span class="kw4">const</span> <a href="cpp-utility-tuple.html"><span class="kw1098">std::<span class="me2">tuple</span></span></a><span class="sy1"><</span>UTypes...<span class="sy1">></span><span class="sy3">&</span> rhs <span class="br0">)</span><span class="sy4">;</span></div>
|
||||
</td>
|
||||
<td class="t-dcl-nopad"></td>
|
||||
<td><span class="t-mark-rev t-since-cxx11">(C++11 起)</span><br />
|
||||
<span class="t-mark-rev t-until-cxx14">(C++14 前)</span></td>
|
||||
</tr>
|
||||
<tr class="t-dcl t-since-cxx14 t-until-cxx20">
|
||||
<td>
|
||||
<div><span class="mw-geshi cpp source-cpp"><span class="kw1">template</span><span class="sy1"><</span> <span class="kw1">class</span>... <span class="me1">TTypes</span>, <span class="kw1">class</span>... <span class="me1">UTypes</span> <span class="sy1">></span><br /></span>
|
||||
<p><span class="kw4">constexpr</span> <span class="kw4">bool</span> operator<span class="sy1"><</span><span class="br0">(</span> <span class="kw4">const</span> <a href="cpp-utility-tuple.html"><span class="kw1098">std::<span class="me2">tuple</span></span></a><span class="sy1"><</span>TTypes...<span class="sy1">></span><span class="sy3">&</span> lhs,<br /></p>
|
||||
<span class="kw4">const</span> <a href="cpp-utility-tuple.html"><span class="kw1098">std::<span class="me2">tuple</span></span></a><span class="sy1"><</span>UTypes...<span class="sy1">></span><span class="sy3">&</span> rhs <span class="br0">)</span><span class="sy4">;</span></div>
|
||||
</td>
|
||||
<td class="t-dcl-nopad"></td>
|
||||
<td><span class="t-mark-rev t-since-cxx14">(C++14 起)</span><br />
|
||||
<span class="t-mark-rev t-until-cxx20">(C++20 前)</span></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
<tbody></tbody>
|
||||
<tbody class="t-dcl-rev t-dcl-rev-num">
|
||||
<tr class="t-dcl-rev-aux">
|
||||
<td></td>
|
||||
<td rowspan="142">(4)</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr class="t-dcl t-since-cxx11 t-until-cxx14">
|
||||
<td>
|
||||
<div><span class="mw-geshi cpp source-cpp"><span class="kw1">template</span><span class="sy1"><</span> <span class="kw1">class</span>... <span class="me1">TTypes</span>, <span class="kw1">class</span>... <span class="me1">UTypes</span> <span class="sy1">></span><br /></span>
|
||||
<p><span class="kw4">bool</span> operator<span class="sy1"><=</span><span class="br0">(</span> <span class="kw4">const</span> <a href="cpp-utility-tuple.html"><span class="kw1098">std::<span class="me2">tuple</span></span></a><span class="sy1"><</span>TTypes...<span class="sy1">></span><span class="sy3">&</span> lhs,<br /></p>
|
||||
<span class="kw4">const</span> <a href="cpp-utility-tuple.html"><span class="kw1098">std::<span class="me2">tuple</span></span></a><span class="sy1"><</span>UTypes...<span class="sy1">></span><span class="sy3">&</span> rhs <span class="br0">)</span><span class="sy4">;</span></div>
|
||||
</td>
|
||||
<td class="t-dcl-nopad"></td>
|
||||
<td><span class="t-mark-rev t-since-cxx11">(C++11 起)</span><br />
|
||||
<span class="t-mark-rev t-until-cxx14">(C++14 前)</span></td>
|
||||
</tr>
|
||||
<tr class="t-dcl t-since-cxx14 t-until-cxx20">
|
||||
<td>
|
||||
<div><span class="mw-geshi cpp source-cpp"><span class="kw1">template</span><span class="sy1"><</span> <span class="kw1">class</span>... <span class="me1">TTypes</span>, <span class="kw1">class</span>... <span class="me1">UTypes</span> <span class="sy1">></span><br /></span>
|
||||
<p><span class="kw4">constexpr</span> <span class="kw4">bool</span> operator<span class="sy1"><=</span><span class="br0">(</span> <span class="kw4">const</span> <a href="cpp-utility-tuple.html"><span class="kw1098">std::<span class="me2">tuple</span></span></a><span class="sy1"><</span>TTypes...<span class="sy1">></span><span class="sy3">&</span> lhs,<br /></p>
|
||||
<span class="kw4">const</span> <a href="cpp-utility-tuple.html"><span class="kw1098">std::<span class="me2">tuple</span></span></a><span class="sy1"><</span>UTypes...<span class="sy1">></span><span class="sy3">&</span> rhs <span class="br0">)</span><span class="sy4">;</span></div>
|
||||
</td>
|
||||
<td class="t-dcl-nopad"></td>
|
||||
<td><span class="t-mark-rev t-since-cxx14">(C++14 起)</span><br />
|
||||
<span class="t-mark-rev t-until-cxx20">(C++20 前)</span></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
<tbody></tbody>
|
||||
<tbody class="t-dcl-rev t-dcl-rev-num">
|
||||
<tr class="t-dcl-rev-aux">
|
||||
<td></td>
|
||||
<td rowspan="142">(5)</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr class="t-dcl t-since-cxx11 t-until-cxx14">
|
||||
<td>
|
||||
<div><span class="mw-geshi cpp source-cpp"><span class="kw1">template</span><span class="sy1"><</span> <span class="kw1">class</span>... <span class="me1">TTypes</span>, <span class="kw1">class</span>... <span class="me1">UTypes</span> <span class="sy1">></span><br /></span>
|
||||
<p><span class="kw4">bool</span> operator<span class="sy1">></span><span class="br0">(</span> <span class="kw4">const</span> <a href="cpp-utility-tuple.html"><span class="kw1098">std::<span class="me2">tuple</span></span></a><span class="sy1"><</span>TTypes...<span class="sy1">></span><span class="sy3">&</span> lhs,<br /></p>
|
||||
<span class="kw4">const</span> <a href="cpp-utility-tuple.html"><span class="kw1098">std::<span class="me2">tuple</span></span></a><span class="sy1"><</span>UTypes...<span class="sy1">></span><span class="sy3">&</span> rhs <span class="br0">)</span><span class="sy4">;</span></div>
|
||||
</td>
|
||||
<td class="t-dcl-nopad"></td>
|
||||
<td><span class="t-mark-rev t-since-cxx11">(C++11 起)</span><br />
|
||||
<span class="t-mark-rev t-until-cxx14">(C++14 前)</span></td>
|
||||
</tr>
|
||||
<tr class="t-dcl t-since-cxx14 t-until-cxx20">
|
||||
<td>
|
||||
<div><span class="mw-geshi cpp source-cpp"><span class="kw1">template</span><span class="sy1"><</span> <span class="kw1">class</span>... <span class="me1">TTypes</span>, <span class="kw1">class</span>... <span class="me1">UTypes</span> <span class="sy1">></span><br /></span>
|
||||
<p><span class="kw4">constexpr</span> <span class="kw4">bool</span> operator<span class="sy1">></span><span class="br0">(</span> <span class="kw4">const</span> <a href="cpp-utility-tuple.html"><span class="kw1098">std::<span class="me2">tuple</span></span></a><span class="sy1"><</span>TTypes...<span class="sy1">></span><span class="sy3">&</span> lhs,<br /></p>
|
||||
<span class="kw4">const</span> <a href="cpp-utility-tuple.html"><span class="kw1098">std::<span class="me2">tuple</span></span></a><span class="sy1"><</span>UTypes...<span class="sy1">></span><span class="sy3">&</span> rhs <span class="br0">)</span><span class="sy4">;</span></div>
|
||||
</td>
|
||||
<td class="t-dcl-nopad"></td>
|
||||
<td><span class="t-mark-rev t-since-cxx14">(C++14 起)</span><br />
|
||||
<span class="t-mark-rev t-until-cxx20">(C++20 前)</span></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
<tbody></tbody>
|
||||
<tbody class="t-dcl-rev t-dcl-rev-num">
|
||||
<tr class="t-dcl-rev-aux">
|
||||
<td></td>
|
||||
<td rowspan="142">(6)</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr class="t-dcl t-since-cxx11 t-until-cxx14">
|
||||
<td>
|
||||
<div><span class="mw-geshi cpp source-cpp"><span class="kw1">template</span><span class="sy1"><</span> <span class="kw1">class</span>... <span class="me1">TTypes</span>, <span class="kw1">class</span>... <span class="me1">UTypes</span> <span class="sy1">></span><br /></span>
|
||||
<p><span class="kw4">bool</span> operator<span class="sy1">>=</span><span class="br0">(</span> <span class="kw4">const</span> <a href="cpp-utility-tuple.html"><span class="kw1098">std::<span class="me2">tuple</span></span></a><span class="sy1"><</span>TTypes...<span class="sy1">></span><span class="sy3">&</span> lhs,<br /></p>
|
||||
<span class="kw4">const</span> <a href="cpp-utility-tuple.html"><span class="kw1098">std::<span class="me2">tuple</span></span></a><span class="sy1"><</span>UTypes...<span class="sy1">></span><span class="sy3">&</span> rhs <span class="br0">)</span><span class="sy4">;</span></div>
|
||||
</td>
|
||||
<td class="t-dcl-nopad"></td>
|
||||
<td><span class="t-mark-rev t-since-cxx11">(C++11 起)</span><br />
|
||||
<span class="t-mark-rev t-until-cxx14">(C++14 前)</span></td>
|
||||
</tr>
|
||||
<tr class="t-dcl t-since-cxx14 t-until-cxx20">
|
||||
<td>
|
||||
<div><span class="mw-geshi cpp source-cpp"><span class="kw1">template</span><span class="sy1"><</span> <span class="kw1">class</span>... <span class="me1">TTypes</span>, <span class="kw1">class</span>... <span class="me1">UTypes</span> <span class="sy1">></span><br /></span>
|
||||
<p><span class="kw4">constexpr</span> <span class="kw4">bool</span> operator<span class="sy1">>=</span><span class="br0">(</span> <span class="kw4">const</span> <a href="cpp-utility-tuple.html"><span class="kw1098">std::<span class="me2">tuple</span></span></a><span class="sy1"><</span>TTypes...<span class="sy1">></span><span class="sy3">&</span> lhs,<br /></p>
|
||||
<span class="kw4">const</span> <a href="cpp-utility-tuple.html"><span class="kw1098">std::<span class="me2">tuple</span></span></a><span class="sy1"><</span>UTypes...<span class="sy1">></span><span class="sy3">&</span> rhs <span class="br0">)</span><span class="sy4">;</span></div>
|
||||
</td>
|
||||
<td class="t-dcl-nopad"></td>
|
||||
<td><span class="t-mark-rev t-since-cxx14">(C++14 起)</span><br />
|
||||
<span class="t-mark-rev t-until-cxx20">(C++20 前)</span></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
<tbody>
|
||||
<tr class="t-dcl t-since-cxx20">
|
||||
<td>
|
||||
<div><span class="mw-geshi cpp source-cpp"><span class="kw1">template</span><span class="sy1"><</span> <span class="kw1">class</span>... <span class="me1">TTypes</span>, <span class="kw1">class</span>... <span class="me1">UTypes</span> <span class="sy1">></span><br /></span>
|
||||
<p><span class="kw4">constexpr</span> <span class="coMULTI">/* see below */</span> operator<span class="sy1"><=></span><span class="br0">(</span> <span class="kw4">const</span> <a href="cpp-utility-tuple.html"><span class="kw1098">std::<span class="me2">tuple</span></span></a><span class="sy1"><</span>TTypes...<span class="sy1">></span><span class="sy3">&</span> lhs,<br /></p>
|
||||
<span class="kw4">const</span> <a href="cpp-utility-tuple.html"><span class="kw1098">std::<span class="me2">tuple</span></span></a><span class="sy1"><</span>UTypes...<span class="sy1">></span><span class="sy3">&</span> rhs <span class="br0">)</span><span class="sy4">;</span></div>
|
||||
</td>
|
||||
<td>(7)</td>
|
||||
<td><span class="t-mark-rev t-since-cxx20">(C++20 起)</span></td>
|
||||
</tr>
|
||||
<tr class="t-dcl-sep">
|
||||
<td></td>
|
||||
<td></td>
|
||||
<td></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<div class="t-li1"><span class="t-li">1-2)</span> 比较 tuple <code>lhs</code> 的每个元素和 tuple <code>rhs</code> 的对应元素。</div>
|
||||
<div class="t-li1"><span class="t-li">3-6)</span> 用 <span class="t-c"><span class="mw-geshi cpp source-cpp">operator<span class="sy1"><</span></span></span> 以字典序比较 <code>lhs</code> 与 <code>rhs</code> ,即比较首元素,若等价则比较第二元素,若均等价则比较第三元素,以此类推。
|
||||
<p>对于非空 tuple , <span class="t-v">(3)</span> 等价于</p>
|
||||
<div dir="ltr" class="mw-geshi" style="text-align: left;">
|
||||
<div class="cpp source-cpp">
|
||||
<pre class="de1"><span class="kw1">if</span> <span class="br0">(</span>std<span class="sy4">::</span><span class="me2">get</span><span class="sy1"><</span><span class="nu0">0</span><span class="sy1">></span><span class="br0">(</span>lhs<span class="br0">)</span> <span class="sy1"><</span> std<span class="sy4">::</span><span class="me2">get</span><span class="sy1"><</span><span class="nu0">0</span><span class="sy1">></span><span class="br0">(</span>rhs<span class="br0">)</span><span class="br0">)</span> <span class="kw1">return</span> <span class="kw2">true</span><span class="sy4">;</span>
|
||||
<span class="kw1">if</span> <span class="br0">(</span>std<span class="sy4">::</span><span class="me2">get</span><span class="sy1"><</span><span class="nu0">0</span><span class="sy1">></span><span class="br0">(</span>rhs<span class="br0">)</span> <span class="sy1"><</span> std<span class="sy4">::</span><span class="me2">get</span><span class="sy1"><</span><span class="nu0">0</span><span class="sy1">></span><span class="br0">(</span>lhs<span class="br0">)</span><span class="br0">)</span> <span class="kw1">return</span> <span class="kw2">false</span><span class="sy4">;</span>
|
||||
<span class="kw1">if</span> <span class="br0">(</span>std<span class="sy4">::</span><span class="me2">get</span><span class="sy1"><</span><span class="nu0">1</span><span class="sy1">></span><span class="br0">(</span>lhs<span class="br0">)</span> <span class="sy1"><</span> std<span class="sy4">::</span><span class="me2">get</span><span class="sy1"><</span><span class="nu0">1</span><span class="sy1">></span><span class="br0">(</span>rhs<span class="br0">)</span><span class="br0">)</span> <span class="kw1">return</span> <span class="kw2">true</span><span class="sy4">;</span>
|
||||
<span class="kw1">if</span> <span class="br0">(</span>std<span class="sy4">::</span><span class="me2">get</span><span class="sy1"><</span><span class="nu0">1</span><span class="sy1">></span><span class="br0">(</span>rhs<span class="br0">)</span> <span class="sy1"><</span> std<span class="sy4">::</span><span class="me2">get</span><span class="sy1"><</span><span class="nu0">1</span><span class="sy1">></span><span class="br0">(</span>lhs<span class="br0">)</span><span class="br0">)</span> <span class="kw1">return</span> <span class="kw2">false</span><span class="sy4">;</span>
|
||||
...
|
||||
<span class="kw1">return</span> std<span class="sy4">::</span><span class="me2">get</span><span class="sy1"><</span>N <span class="sy2">-</span> <span class="nu0">1</span><span class="sy1">></span><span class="br0">(</span>lhs<span class="br0">)</span> <span class="sy1"><</span> std<span class="sy4">::</span><span class="me2">get</span><span class="sy1"><</span>N <span class="sy2">-</span> <span class="nu0">1</span><span class="sy1">></span><span class="br0">(</span>rhs<span class="br0">)</span><span class="sy4">;</span></pre></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="t-li1"><span class="t-li">7)</span> 用<i>合成三路比较</i>以字典序比较 <code>lhs</code> 与 <code>rhs</code> ,即比较首元素,若等价则比较第二元素,若均等价则比较第三元素,以此类推。
|
||||
<p>返回类型为 <code>lhs</code> 与 <code>rhs</code> 中的每对元素上的三路比较结果的<a href="cpp-utility-compare-common_comparison_category.html">共用比较类别类型</a>。对于空 tuple ,返回类型为 <span class="t-lc">std::strong_ordering</span> 。<br />
|
||||
对于非空 tuple , <span class="t-v">(7)</span> 等价于</p>
|
||||
<div dir="ltr" class="mw-geshi" style="text-align: left;">
|
||||
<div class="cpp source-cpp">
|
||||
<pre class="de1"><span class="kw1">if</span> <span class="br0">(</span><span class="kw4">auto</span> c <span class="sy1">=</span> synth_three_way<span class="br0">(</span>std<span class="sy4">::</span><span class="me2">get</span><span class="sy1"><</span><span class="nu0">0</span><span class="sy1">></span><span class="br0">(</span>lhs<span class="br0">)</span>, std<span class="sy4">::</span><span class="me2">get</span><span class="sy1"><</span><span class="nu0">0</span><span class="sy1">></span><span class="br0">(</span>lhs<span class="br0">)</span><span class="br0">)</span><span class="sy4">;</span> c <span class="sy3">!</span><span class="sy1">=</span> <span class="nu0">0</span><span class="br0">)</span> <span class="kw1">return</span> c<span class="sy4">;</span>
|
||||
<span class="kw1">if</span> <span class="br0">(</span><span class="kw4">auto</span> c <span class="sy1">=</span> synth_three_way<span class="br0">(</span>std<span class="sy4">::</span><span class="me2">get</span><span class="sy1"><</span><span class="nu0">1</span><span class="sy1">></span><span class="br0">(</span>lhs<span class="br0">)</span>, std<span class="sy4">::</span><span class="me2">get</span><span class="sy1"><</span><span class="nu0">1</span><span class="sy1">></span><span class="br0">(</span>lhs<span class="br0">)</span><span class="br0">)</span><span class="sy4">;</span> c <span class="sy3">!</span><span class="sy1">=</span> <span class="nu0">0</span><span class="br0">)</span> <span class="kw1">return</span> c<span class="sy4">;</span>
|
||||
...
|
||||
<span class="kw1">return</span> synth_three_way<span class="br0">(</span>std<span class="sy4">::</span><span class="me2">get</span><span class="sy1"><</span>N <span class="sy2">-</span> <span class="nu0">1</span><span class="sy1">></span><span class="br0">(</span>lhs<span class="br0">)</span>, std<span class="sy4">::</span><span class="me2">get</span><span class="sy1"><</span>N <span class="sy2">-</span> <span class="nu0">1</span><span class="sy1">></span><span class="br0">(</span>lhs<span class="br0">)</span><span class="br0">)</span><span class="sy4">;</span></pre></div>
|
||||
</div>
|
||||
其中 <i><code>synth_three_way</code></i> 是进行合成三路比较的仅用于阐释的函数对象。</div>
|
||||
<p><span class="t-c"><span class="mw-geshi cpp source-cpp">sizeof...<span class="br0">(</span>TTypes<span class="br0">)</span></span></span> 与 <span class="t-c"><span class="mw-geshi cpp source-cpp">sizeof...<span class="br0">(</span>UTypes<span class="br0">)</span></span></span> 必须相等,否则程序非良构<span class="t-rev-inl t-since-cxx20"><span>,或对于 <span class="t-c"><span class="mw-geshi cpp source-cpp">operator<span class="sy1"><=></span></span></span> ,该运算符函数不参与重载决议</span> <span><span class="t-mark-rev t-since-cxx20">(C++20 起)</span></span></span>。以上代码中的 <code>N</code> 等于两者。</p>
|
||||
<p>所有比较运算符是短路的;它们在确定结果所必须的比较之外不访问 tuple 元素。</p>
|
||||
<table class="t-rev-begin">
|
||||
<tr class="t-rev t-since-cxx20">
|
||||
<td>
|
||||
<p><code><</code>、 <code><=</code>、 <code>></code>、 <code>>=</code> 及 <code>!=</code> 运算符分别从 <code>operator<=></code> 与 <code>operator==</code> <a href="cpp-language-operators.html#.E5.85.B3.E7.B3.BB.E8.BF.90.E7.AE.97.E7.AC.A6">合成</a>。</p>
|
||||
</td>
|
||||
<td><span class="t-mark-rev t-since-cxx20">(C++20 起)</span></td>
|
||||
</tr>
|
||||
</table>
|
||||
<table class="t-rev-begin">
|
||||
<tr class="t-rev t-since-cxx20">
|
||||
<td>
|
||||
<h3><span class="mw-headline" id=".E5.90.88.E6.88.90.E4.B8.89.E8.B7.AF.E6.AF.94.E8.BE.83">合成三路比较</span></h3>
|
||||
<p>给定二个对象类型 <code>T</code> 与 <code>U</code> 、作为左操作数的 <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="kw4">const</span> T</span></span> 左值 <code>t</code> 、作为右操作数的 <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="kw4">const</span> U</span></span> 左值 <code>u</code> ,<i>合成三路比较</i>定义为:</p>
|
||||
<ul>
|
||||
<li>若 <span class="t-c"><span class="mw-geshi cpp source-cpp">std<span class="sy4">::</span><span class="me2">three_way_comparable_with</span><span class="sy1"><</span>T, U<span class="sy1">></span></span></span> 得到满足,则等价于 <span class="t-c"><span class="mw-geshi cpp source-cpp">t <span class="sy1"><=></span> u</span></span> ;</li>
|
||||
<li>否则,若以两种顺序比较 <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="kw4">const</span> T</span></span> 左值与 <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="kw4">const</span> U</span></span> 左值均为良构且结果类型满足 <i><code>boolean-testable</code></i> ,则等价于</li>
|
||||
</ul>
|
||||
<div dir="ltr" class="mw-geshi" style="text-align: left;">
|
||||
<div class="cpp source-cpp">
|
||||
<pre class="de1">t <span class="sy1"><</span> u <span class="sy4">?</span> std<span class="sy4">::</span><span class="me2">weak_ordering</span><span class="sy4">::</span><span class="me2">less</span> <span class="sy4">:</span>
|
||||
u <span class="sy1"><</span> t <span class="sy4">?</span> std<span class="sy4">::</span><span class="me2">weak_ordering</span><span class="sy4">::</span><span class="me2">greater</span> <span class="sy4">:</span>
|
||||
std<span class="sy4">::</span><span class="me2">weak_ordering</span><span class="sy4">::</span><span class="me2">equivalent</span></pre></div>
|
||||
</div>
|
||||
<ul>
|
||||
<li>否则不定义合成三路比较,这使得 <span class="t-c"><span class="mw-geshi cpp source-cpp">operator<span class="sy1"><=></span></span></span> 不参与重载决议。</li>
|
||||
</ul>
|
||||
<p>若 <a href="cpp-utility-compare-three_way_comparable.html"><code>three_way_comparable_with</code></a> 或 <i><code>boolean-testable</code></i> 被满足但未被实现,则 <span class="t-c"><span class="mw-geshi cpp source-cpp">operator<span class="sy1"><=></span></span></span> 的行为未定义。</p>
|
||||
</td>
|
||||
<td><span class="t-mark-rev t-since-cxx20">(C++20 起)</span></td>
|
||||
</tr>
|
||||
</table>
|
||||
<h3><span class="mw-headline" id=".E5.8F.82.E6.95.B0">参数</span></h3>
|
||||
<table class="t-par-begin">
|
||||
<tr class="t-par">
|
||||
<td>lhs, rhs</td>
|
||||
<td>-</td>
|
||||
<td>要比较的 tuple</td>
|
||||
</tr>
|
||||
</table>
|
||||
<h3><span class="mw-headline" id=".E8.BF.94.E5.9B.9E.E5.80.BC">返回值</span></h3>
|
||||
<div class="t-li1"><span class="t-li">1)</span> 若对于所有 <code>[0, sizeof...(Types))</code> 中的 i 有 <span class="t-c"><span class="mw-geshi cpp source-cpp">std<span class="sy4">::</span><span class="me2">get</span><span class="sy1"><</span>i<span class="sy1">></span><span class="br0">(</span>lhs<span class="br0">)</span> <span class="sy1">==</span> std<span class="sy4">::</span><span class="me2">get</span><span class="sy1"><</span>i<span class="sy1">></span><span class="br0">(</span>rhs<span class="br0">)</span></span></span> 则为 <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="kw2">true</span></span></span> ,否则为 <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="kw2">false</span></span></span> 。对二个空 tuple 返回 <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="kw2">true</span></span></span> 。</div>
|
||||
<div class="t-li1"><span class="t-li">2)</span> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="sy3">!</span><span class="br0">(</span>lhs <span class="sy1">==</span> rhs<span class="br0">)</span></span></span></div>
|
||||
<div class="t-li1"><span class="t-li">3)</span> 若 <code>lhs</code> 中的首个不等价元素小于 <code>rhs</code> 中的则为 <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="kw2">true</span></span></span> ,若 <code>rhs</code> 中的首个不等价元素小于 <code>lhs</code> 中的或无不等价元素则为 <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="kw2">false</span></span></span> 。对两个空 tuple 返回 <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="kw2">false</span></span></span> 。</div>
|
||||
<div class="t-li1"><span class="t-li">4)</span> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="sy3">!</span><span class="br0">(</span>rhs <span class="sy1"><</span> lhs<span class="br0">)</span></span></span></div>
|
||||
<div class="t-li1"><span class="t-li">5)</span> <span class="t-c"><span class="mw-geshi cpp source-cpp">rhs <span class="sy1"><</span> lhs</span></span></div>
|
||||
<div class="t-li1"><span class="t-li">6)</span> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="sy3">!</span><span class="br0">(</span>lhs <span class="sy1"><</span> rhs<span class="br0">)</span></span></span></div>
|
||||
<div class="t-li1"><span class="t-li">7)</span> 首对不等价元素间的关系,若存在不等价元素,否则为 <span class="t-c"><span class="mw-geshi cpp source-cpp">std<span class="sy4">::</span><span class="me2">strong_ordering</span><span class="sy4">::</span><span class="me2">equal</span></span></span> 。对两个空 tuple 返回 <span class="t-c"><span class="mw-geshi cpp source-cpp">std<span class="sy4">::</span><span class="me2">strong_ordering</span><span class="sy4">::</span><span class="me2">equal</span></span></span> 。</div>
|
||||
<h3><span class="mw-headline" id=".E7.A4.BA.E4.BE.8B">示例</span></h3>
|
||||
<div class="t-example">
|
||||
<p>因为 operator< 对 tuples 定义,故能排序 tuple 的容器。</p>
|
||||
<div class="t-example-live-link"></div>
|
||||
<div dir="ltr" class="mw-geshi" style="text-align: left;">
|
||||
<div class="cpp source-cpp">
|
||||
<pre class="de1"><span class="co2">#include <iostream></span>
|
||||
<span class="co2">#include <tuple></span>
|
||||
<span class="co2">#include <vector></span>
|
||||
<span class="co2">#include <algorithm></span>
|
||||
<span class="kw4">int</span> main<span class="br0">(</span><span class="br0">)</span>
|
||||
<span class="br0">{</span>
|
||||
<a href="cpp-container-vector.html"><span class="kw1269">std::<span class="me2">vector</span></span></a><span class="sy1"><</span><a href="cpp-utility-tuple.html"><span class="kw1098">std::<span class="me2">tuple</span></span></a><span class="sy1"><</span><span class="kw4">int</span>, <a href="cpp-string-basic_string.html"><span class="kw1230">std::<span class="me2">string</span></span></a>, <span class="kw4">float</span><span class="sy1">>></span> v<span class="sy4">;</span>
|
||||
v.<span class="me1">emplace_back</span><span class="br0">(</span><span class="nu0">2</span>, <span class="st0">"baz"</span>, <span class="sy2">-</span><span class="nu16">0.1</span><span class="br0">)</span><span class="sy4">;</span>
|
||||
v.<span class="me1">emplace_back</span><span class="br0">(</span><span class="nu0">2</span>, <span class="st0">"bar"</span>, <span class="nu16">3.14</span><span class="br0">)</span><span class="sy4">;</span>
|
||||
v.<span class="me1">emplace_back</span><span class="br0">(</span><span class="nu0">1</span>, <span class="st0">"foo"</span>, <span class="nu16">100.1</span><span class="br0">)</span><span class="sy4">;</span>
|
||||
<a href="cpp-algorithm-sort.html"><span class="kw1618">std::<span class="me2">sort</span></span></a><span class="br0">(</span>v.<span class="me1">begin</span><span class="br0">(</span><span class="br0">)</span>, v.<span class="me1">end</span><span class="br0">(</span><span class="br0">)</span><span class="br0">)</span><span class="sy4">;</span>
|
||||
|
||||
<span class="kw1">for</span><span class="br0">(</span><span class="kw4">auto</span> p<span class="sy4">:</span> v<span class="br0">)</span> <span class="br0">{</span>
|
||||
<a href="cpp-io-cout.html"><span class="kw1758">std::<span class="me2">cout</span></span></a> <span class="sy1"><<</span> <span class="st0">"("</span> <span class="sy1"><<</span> std<span class="sy4">::</span><span class="me2">get</span><span class="sy1"><</span><span class="nu0">0</span><span class="sy1">></span><span class="br0">(</span>p<span class="br0">)</span> <span class="sy1"><<</span> <span class="st0">", "</span> <span class="sy1"><<</span> std<span class="sy4">::</span><span class="me2">get</span><span class="sy1"><</span><span class="nu0">1</span><span class="sy1">></span><span class="br0">(</span>p<span class="br0">)</span>
|
||||
<span class="sy1"><<</span> <span class="st0">", "</span> <span class="sy1"><<</span> std<span class="sy4">::</span><span class="me2">get</span><span class="sy1"><</span><span class="nu0">2</span><span class="sy1">></span><span class="br0">(</span>p<span class="br0">)</span> <span class="sy1"><<</span> <span class="st0">")<span class="es1">\n</span>"</span><span class="sy4">;</span>
|
||||
<span class="br0">}</span>
|
||||
<span class="br0">}</span></pre></div>
|
||||
</div>
|
||||
<p>输出:</p>
|
||||
<div dir="ltr" class="mw-geshi" style="text-align: left;">
|
||||
<div class="text source-text">
|
||||
<pre class="de1">(1, foo, 100.1)
|
||||
(2, bar, 3.14)
|
||||
(2, baz, -0.1)</pre></div>
|
||||
</div>
|
||||
</div>
|
||||
<h3><span class="mw-headline" id=".E5.8F.82.E9.98.85">参阅</span></h3>
|
||||
<table class="t-dsc-begin">
|
||||
<tr>
|
||||
<td></td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<div class="visualClear"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
Reference in New Issue
Block a user