operator==,<=>(std::inplace_vector)
來自 cppreference.com
< cpp | 容器 | inplace_vector
constexpr friend bool operator==( const std::inplace_vector<T, N>& lhs, const std::inplace_vector<T, N>& rhs ); |
(1) | (C++26 起) |
constexpr friend synth-three-way-result<T> operator<=>( const std::inplace_vector<T, N>& lhs, |
(2) | (C++26 起) |
比較兩個 std::inplace_vector 的內容。
1) 檢查 lhs 和 rhs 的內容是否相等,即它們具有相同數量的元素,並且 lhs 中的每個元素都與 rhs 中相同位置的元素比較相等。
2) 按字典序比較 lhs 和 rhs 的內容。比較的執行方式如同呼叫:
std::lexicographical_compare_three_way(lhs.begin(), lhs.end(),
rhs.begin(), rhs.end(), synth-three-way);.
std::lexicographical_compare_three_way(lhs.begin(), lhs.end(),
rhs.begin(), rhs.end(), synth-three-way);.
必須滿足以下至少一個條件:
-
T
滿足three_way_comparable
。 - 為型別(可能 const 限定的)
T
的值定義了<
,並且<
是全序關係。
<
、<=
、>
、>=
和 !=
運算子分別由 operator<=> 和 operator== 合成。
目錄 |
[編輯] 引數
lhs, rhs | - | 要比較內容的 std::inplace_vector |
-為了使用過載 (1),T 必須滿足 EqualityComparable 的要求。 |
[編輯] 返回值
1) 如果 std::inplace_vector 的內容相等,則為 true,否則為 false。
2) 如果 lhs 和 rhs 中存在第一對不相等的元素,則返回它們的相對順序,否則返回 lhs.size() <=> rhs.size()。
[編輯] 複雜度
1) 如果 lhs 和 rhs 的大小不同,則為常數時間,否則與 std::inplace_vector 的大小成線性關係。
2) 與 std::inplace_vector 的大小成線性關係。
[編輯] 注意
關係運算符是根據 synth-three-way 定義的,它儘可能使用 operator<=>,否則使用 operator<。
值得注意的是,如果元素本身不提供 operator<=>,但可以隱式轉換為可進行三向比較的型別,則將使用該轉換而不是 operator<。
[編輯] 示例
執行此程式碼
#include <inplace_vector> int main() { constexpr std::inplace_vector<int, 4> a{1, 2, 3}, b{1, 2, 3}, c{7, 8, 9, 10}; static_assert ("" "Compare equal containers:" && (a != b) == false && (a == b) == true && (a < b) == false && (a <= b) == true && (a > b) == false && (a >= b) == true && (a <=> b) >= 0 && (a <=> b) <= 0 && (a <=> b) == 0 && "Compare non equal containers:" && (a != c) == true && (a == c) == false && (a < c) == true && (a <= c) == true && (a > c) == false && (a >= c) == false && (a <=> c) < 0 && (a <=> c) != 0 && (a <=> c) <= 0 && ""); }