std::ranges::views::keys, std::ranges::keys_view
来自cppreference.com
<tbody>
</tbody>
| 在标头 <ranges> 定义
|
||
template< class R > using keys_view = ranges::elements_view<R, 0>; |
(1) | (C++20 起) |
namespace views { inline constexpr auto 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 (auto const& 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()
{
const std::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::string const& name : std::views::keys(quark_mass_charge))
std::cout << std::setw(9) << name << " │ ";
std::cout << "\n" "质量 MeV/c²: │ ";
for (const double mass : std::views::values(quark_mass_charge))
std::cout << std::setw(9) << mass << " │ ";
std::cout << "\n" "电荷: │ ";
for (const bool 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 式切片:起始下标、长度、跨度 (类) |