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

来自cppreference.com
< cpp‎ | ranges
 
 
范围库
范围适配器
 
在标头 <ranges> 定义
template<class R >
using keys_view =ranges::elements_view<R, 0>;
(1) (C++20 起)
namespace views {

    inlineconstexprauto keys = ranges::elements<0>;

}
(2) (C++20 起)

接收元组式值(例如 std::tuplestd::pair)的 view,并产生一个视图,其值类型为被适配的视图的值类型的第一个元素。

1)ranges::elements_­view<R, 0> 的别名。
2)范围适配器对象(RangeAdaptorObject) (也是 范围适配器闭包对象(RangeAdaptorClosureObject) )。对任何适合的子表达式 e,表达式 views​::keys(e)表达式等价keys_­view<views​::​all_­t<decltype((e))>>{e}

目录

[编辑]注解

keys_view 能用于从关联容器提取,例如

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

[编辑]示例

显示粒子物理中每种 夸克 类型的值。

#include <iomanip>#include <iostream>#include <locale>#include <ranges>#include <string>#include <tuple>#include <vector>   int main(){conststd::vector<std::tuple<std::string, double, bool>> quark_mass_charge {// 名字,MeV/c²,具有正电荷:{"上", 2.3, true}, {"下", 4.8, false}, {"粲", 1275, true}, {"奇异", 95, false}, {"顶", 173'210, true}, {"底", 4'180, false}, };   std::cout.imbue(std::locale("en_US.utf8"));std::cout<<"夸克名称: │ ";for(std::stringconst& name : std::views::keys(quark_mass_charge))std::cout<<std::setw(9)<< name <<" │ ";   std::cout<<"\n""质量 MeV/c²: │ ";for(constdouble mass : std::views::values(quark_mass_charge))std::cout<<std::setw(9)<< mass <<" │ ";   std::cout<<"\n""电荷: │ ";for(constbool pos : std::views::elements<2>(quark_mass_charge))std::cout<<std::setw(9)<<(pos ?"+2/3":"-1/3")<<" │ ";std::cout<<'\n';}

输出:

夸克名称: │ 上 │ 下 │ 粲 │ 奇异 │ 顶 │ 底 │ 质量 MeV/c²: │ 2.3 │ 4.8 │ 1,275 │ 95 │ 173,210 │ 4,180 │ 电荷: │ +2/3 │ -1/3 │ +2/3 │ -1/3 │ +2/3 │ -1/3 │

[编辑]缺陷报告

下列更改行为的缺陷报告追溯地应用于以前出版的 C++ 标准。

缺陷报告 应用于 出版时的行为 正确行为
LWG 3563 C++20 keys_view 由于使用 views::all_t 无法参与 CTAD 移除 views::all_t

[编辑]参阅

接受一个由对偶式值组成的 view 并产生每个对偶的第二元素组成的 view
(类模板)(范围适配器对象)[编辑]
选取 tuple-like 值组成的 view 和数值 N,产生每个元组的第 N 个元素组成的 view
(类模板)(范围适配器对象)[编辑]
valarray 的 BLAS 式切片:起始下标、长度、跨度
(类)[编辑]
close