Espacios de nombres
Variantes
Acciones

operator==,!=,<,<=,>,>=,<=>(std::pair)

De cppreference.com
< cpp‎ | utility‎ | pair
 
 
Biblioteca de servicios
 
std::pair
Funciones miembro
Funciones no miembro
operator==operator!=operator<operator<=operator>operator>=operator<=>
(hasta C++20)(hasta C++20)(hasta C++20)(hasta C++20)(hasta C++20)(C++20)
(C++11)
Guías de deducción(C++17)
Clases auxiliares
(C++11)
 
Definido en el archivo de encabezado <utility>
(1)
template<class T1, class T2 >
bool operator==(conststd::pair<T1,T2>& lhs, conststd::pair<T1,T2>& rhs );
(hasta C++14)
template<class T1, class T2 >

constexprbool operator==(conststd::pair<T1,T2>& lhs,

                           conststd::pair<T1,T2>& rhs );
(desde C++14)
(2)
template<class T1, class T2 >
bool operator!=(conststd::pair<T1,T2>& lhs, conststd::pair<T1,T2>& rhs );
(hasta C++14)
template<class T1, class T2 >

constexprbool operator!=(conststd::pair<T1,T2>& lhs,

                           conststd::pair<T1,T2>& rhs );
(desde C++14)
(hasta C++20)
(3)
template<class T1, class T2 >
bool operator<(conststd::pair<T1,T2>& lhs, conststd::pair<T1,T2>& rhs );
(hasta C++14)
template<class T1, class T2 >

constexprbool operator<(conststd::pair<T1,T2>& lhs,

                          conststd::pair<T1,T2>& rhs );
(desde C++14)
(hasta C++20)
(4)
template<class T1, class T2 >
bool operator<=(conststd::pair<T1,T2>& lhs, conststd::pair<T1,T2>& rhs );
(hasta C++14)
template<class T1, class T2 >

constexprbool operator<=(conststd::pair<T1,T2>& lhs,

                           conststd::pair<T1,T2>& rhs );
(desde C++14)
(hasta C++20)
(5)
template<class T1, class T2 >
bool operator>(conststd::pair<T1,T2>& lhs, conststd::pair<T1,T2>& rhs );
(hasta C++14)
template<class T1, class T2 >

constexprbool operator>(conststd::pair<T1,T2>& lhs,

                          conststd::pair<T1,T2>& rhs );
(desde C++14)
(hasta C++20)
(6)
template<class T1, class T2 >
bool operator>=(conststd::pair<T1,T2>& lhs, conststd::pair<T1,T2>& rhs );
(hasta C++14)
template<class T1, class T2 >

constexprbool operator>=(conststd::pair<T1,T2>& lhs,

                           conststd::pair<T1,T2>& rhs );
(desde C++14)
(hasta C++20)
template<class T1, class T2 >

constexpr/* véase más abajo */ operator<=>(conststd::pair<T1,T2>& lhs,

                                       conststd::pair<T1,T2>& rhs );
(7) (desde C++20)
1-2) Comprueba si los elementos de lhs y rhs son iguales, es decir, compara lhs.first con rhs.first y lhs.second con rhs.second.
3-6) Compara lhs y rhs lexicográficamente mediante el operador operator<, es decir, compara los primeros elementos y solo si son equivalentes, compara los segundos elementos.
7) Compara lhs and rhs lexicográficamente mediante la comparación de tres vías sintetizada (véase más abajo), es decir, compara los primeros elementos y solo si son equivalentes, compara los segundos elementos.
El tipo de retorno es el tipo de categoría de comparación común del tipo resultado de la comparación de tres vías sintetizada en T1 y el de T2.

Los operadores <, <=, >, >=, y != se sintetizan de operator<=> y operator==, respectivamente.

(desde C++20)

Contenido

Comparación de tres vías sintetizada

Dado un tipo objeto T, dos l-valores const T, lhs y rhs como el operando del lado izquierdo y el operando del lado derecho respectivamente, la comparación de tres vías sintetizada se define como:

  • si std::three_way_comparable_with<T, T> se satisface, es equivalente a lhs <=> rhs;
  • de lo contrario, si la comparación de dos l-valores const T mediante el operador operator< está bien formada y el tipo resultado satisface comprobable-booleano, es equivalente a
lhs < rhs ? std::weak_ordering::less: rhs < lhs ? std::weak_ordering::greater: std::weak_ordering::equivalent
  • de lo contrario, la comparación de tres vías sintetizada no se define, lo que hace que el operador operator<=> no participe en la resolución de sobrecargas.

El comportamiento del operador operator<=> no está definido si three_way_comparable_with o comprobable-booleano se satisface pero no se modela.

(desde C++20)

[editar]Parámetros

lhs, rhs - Los pares a comparar.

[editar]Valor de retorno

1)true si lhs.first == rhs.first y lhs.second == rhs.second, de lo contrario false.
2)!(lhs == rhs).
3) Si lhs.first<rhs.first, devuelve true. De lo contrario, si rhs.first<lhs.first, devuelve false. De lo contrario, si lhs.second<rhs.second, devuelve true. De lo contrario, devuelve false.
4)!(rhs < lhs).
5)rhs < lhs.
6)!(lhs < rhs).
7)synth_three_way(lhs.first, rhs.first) si no es igual a 0, de lo contrario synth_three_way(lhs.second, rhs.second), donde synth_three_way es un objeto función de solo exposición que realiza la comparación de tres vías sintetizada.

[editar]Ejemplo

Ya que el operador operator< se define para pares, los contenedores de pares se pueden ordenar.

#include <iostream>#include <iomanip>#include <utility>#include <vector>#include <algorithm>#include <string>   int main(){std::vector<std::pair<int, std::string>> v ={{2, "baz"}, {2, "bar"}, {1, "foo"}};std::sort(v.begin(), v.end());   for(auto p: v){std::cout<<"{"<< p.first<<", "<<std::quoted(p.second)<<"}\n";}}

Salida:

{1, "foo"} {2, "bar"} {2, "baz"}

[editar]Véase también

Compara lexicográficamente los valores de la tupla
(plantilla de función)[editar]
close