std::ranges::views::keys, std::ranges::keys_view
来自cppreference.com
在标头 <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::tuple 或 std::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 式切片:起始下标、长度、跨度 (类) |