Namespaces
Variants

std::ranges:: views:: keys, std::ranges:: keys_view

From cppreference.net
Ranges library
Range adaptors
Défini dans l'en-tête <ranges>
template < class R >
using keys_view = ranges:: elements_view < R, 0 > ;
(1) (depuis C++20)
namespace views {

inline constexpr auto keys = ranges :: elements < 0 > ;

}
(2) (depuis C++20)

Prend une view de valeurs de type tuple-like (par exemple std::tuple ou std::pair ), et produit une vue dont le value-type correspond au premier élément du value-type de la vue adaptée.

1) Un alias pour ranges:: elements_view < R, 0 > .
2) RangeAdaptorObject (et aussi RangeAdaptorClosureObject ). L'expression views :: keys ( e ) est équivalente en expression à keys_view < views:: all_t < decltype ( ( e ) ) >> { e } pour toute sous-expression appropriée e .

Table des matières

Notes

keys_view peut être utile pour extraire les clés des conteneurs associatifs, par exemple

std::map<std::string, int> map{{"one", 1}, {"two", 2}};
for (auto const& key : std::views::keys(map))
    std::cout << key << ' ';
// affiche : one two

Exemple

Affiche les valeurs pour chaque type de quark en physique des particules.

#include <iomanip>
#include <iostream>
#include <locale>
#include <ranges>
#include <string>
#include <tuple>
#include <vector>
int main()
{
    const std::vector<std::tuple<std::string, double, bool>> quark_mass_charge
    {
        // name, MeV/c², has positive electric-charge:
        {"up", 2.3, true}, {"down", 4.8, false},
        {"charm", 1275, true}, {"strange", 95, false},
        {"top", 173'210, true}, {"bottom", 4'180, false},
    };
    std::cout.imbue(std::locale("en_US.utf8"));
    std::cout << "Quark name:  │ ";
    for (std::string const& name : std::views::keys(quark_mass_charge))
        std::cout << std::setw(9) << name << " │ ";
    std::cout << "\n" "Mass MeV/c²: │ ";
    for (const double mass : std::views::values(quark_mass_charge))
        std::cout << std::setw(9) << mass << " │ ";
    std::cout << "\n" "E-charge:    │ ";
    for (const bool pos : std::views::elements<2>(quark_mass_charge))
        std::cout << std::setw(9) << (pos ? "+2/3" : "-1/3") << " │ ";
    std::cout << '\n';
}

Sortie :

Quark name:  │        up │      down │     charm │   strange │       top │    bottom │
Mass MeV/c²: │       2.3 │       4.8 │     1,275 │        95 │   173,210 │     4,180 │
E-charge:    │      +2/3 │      -1/3 │      +2/3 │      -1/3 │      +2/3 │      -1/3 │

Rapports de défauts

Les rapports de défauts modifiant le comportement suivants ont été appliqués rétroactivement aux normes C++ précédemment publiées.

DR Appliqué à Comportement publié Comportement corrigé
LWG 3563 C++20 keys_view ne peut pas participer à CTAD en raison de son utilisation de views::all_t views::all_t supprimé

Voir aussi

prend une view constituée de valeurs de type paire et produit une view des deuxièmes éléments de chaque paire
(modèle de classe) (objet adaptateur de gamme)
prend une view constituée de valeurs tuple-like et un nombre N et produit une view du N ème élément de chaque tuple
(modèle de classe) (objet adaptateur de gamme)
tranche de type BLAS d'un valarray : index de départ, longueur, pas
(classe)