名稱空間
變體
操作

C++ 命名需求: Compare

來自 cppreference.com
 
 
C++ 命名要求
基本
型別屬性
全庫範圍
Compare




Container(容器)
容器元素
迭代器 (Iterator)
流 I/O
格式化器
(C++20)
隨機數
併發
(C++11)
Ranges
多維檢視
其他

 

Compare 是標準庫某些工具對使用者提供的函式物件型別所期望的一組需求。

當對滿足 Compare 型別的物件應用函式呼叫操作時,其返回值轉換為 bool,如果呼叫的第一個引數在此型別所引發的嚴格弱序關係中出現在第二個引數之前,則返回 true,否則返回 false

與任何 BinaryPredicate 一樣,不允許透過解引用的迭代器呼叫非 const 函式,並且從語法上講,函式呼叫操作必須接受 const 物件引數,無論引數是 const 還是非 const,行為都相同。

目錄

[編輯] 需求

型別 T 滿足 Compare,如果

給定

  • comp,一個 T 型別的物件,
  • equiv(a, b),與 !comp(a, b) && !comp(b, a) 表示式等價

以下表達式必須有效並具有其指定的效果

表示式 返回型別 要求
comp(a, b)

滿足 BooleanTestable

(C++20 前)

模型 boolean-testable

(C++20 起)
建立具有以下屬性的嚴格弱序關係
  • 對於所有 acomp(a, a) == false
  • 如果 comp(a, b) == truecomp(b, a) == false
  • 如果 comp(a, b) == truecomp(b, c) == truecomp(a, c) == true
equiv(a, b) bool 建立具有以下屬性的等價關係
  • 對於所有 aequiv(a, a) == true
  • 如果 equiv(a, b) == true,則 equiv(b, a) == true
  • 如果 equiv(a, b) == trueequiv(b, c) == true,則 equiv(a, c) == true

注:comp 在由 equiv 確定的等價類上引入了嚴格全序

[編輯] 標準庫

以下標準庫工具需要 Compare 型別。

唯一鍵的集合,按鍵排序
(類模板) [編輯]
鍵值對集合,按鍵排序,鍵唯一
(類模板) [編輯]
鍵的集合,按鍵排序
(類模板) [編輯]
鍵值對的集合,按鍵排序
(類模板) [編輯]
適配容器以提供優先順序佇列
(類模板) [編輯]
將一個範圍按升序排序
(函式模板) [編輯]
排序元素
(std::forward_list<T,Allocator> 的 public 成員函式) [編輯]
排序元素
(std::list<T,Allocator> 的 public 成員函式) [編輯]
對一個範圍的元素進行排序,同時保留相等元素之間的順序
(函式模板) [編輯]
對一個範圍的前 N 個元素進行排序
(函式模板) [編輯]
複製並部分排序一個範圍的元素
(函式模板) [編輯]
(C++11)
檢查一個範圍是否按升序排序
(函式模板) [編輯]
尋找最大的已排序子範圍
(函式模板) [編輯]
部分排序給定的範圍,確保它被給定的元素劃分
(函式模板) [編輯]
返回一個指向第一個不小於給定值的元素的迭代器
(函式模板) [編輯]
返回一個指向第一個大於某個值的元素的迭代器
(函式模板) [編輯]
判斷一個元素是否存在於部分有序的範圍中
(函式模板) [編輯]
返回與特定鍵匹配的元素範圍
(函式模板) [編輯]
歸併兩個已排序的範圍
(函式模板) [編輯]
歸併兩個已排序連結串列
(std::forward_list<T,Allocator> 的 public 成員函式) [編輯]
歸併兩個已排序連結串列
(std::list<T,Allocator> 的 public 成員函式) [編輯]
就地歸併兩個有序範圍
(函式模板) [編輯]
如果一個序列是另一個序列的子序列,則返回 true
(函式模板) [編輯]
計算兩個集合的差集
(函式模板) [編輯]
計算兩個集合的交集
(函式模板) [編輯]
計算兩個集合的對稱差
(函式模板) [編輯]
計算兩個集合的並集
(函式模板) [編輯]
向一個最大堆新增一個元素
(函式模板) [編輯]
從一個最大堆中移除最大的元素
(函式模板) [編輯]
從一個元素範圍建立一個最大堆
(函式模板) [編輯]
將一個最大堆轉換成一個按升序排序的元素範圍
(函式模板) [編輯]
(C++11)
檢查給定的範圍是否是一個最大堆
(函式模板) [編輯]
尋找是一個最大堆的最大子範圍
(函式模板) [編輯]
返回給定值中較大的那個
(函式模板) [編輯]
返回一個範圍中最大的元素
(函式模板) [編輯]
返回給定值中較小的那個
(函式模板) [編輯]
返回一個範圍中最小的元素
(函式模板) [編輯]
(C++11)
返回兩個元素中較小和較大的一個
(函式模板) [編輯]
返回範圍中最小和最大的元素
(函式模板) [編輯]
如果一個範圍在字典上小於另一個範圍,則返回 true
(函式模板) [編輯]
生成元素範圍的下一個更大的字典序排列
(函式模板) [編輯]
生成元素範圍的下一個更小的字典序排列
(函式模板) [編輯]

[編輯] 缺陷報告

下列更改行為的缺陷報告追溯地應用於以前出版的 C++ 標準。

缺陷報告 應用於 釋出時的行為 正確的行為
LWG 2114
(P2167R3)
C++98 返回型別到 bool 的上下文可轉換性未
反映實現實踐
需求已更正
LWG 3031 C++98 const 值的要求不足 要求已加強

[編輯] 參閱

指定 relation 施加嚴格弱序
(概念) [編輯]
比較運算子 <, <=, >, >=, ==, !=, 和 <=> (C++20),比較引數