std::ranges::views::values, std::ranges::values_view
From cppreference.com
| ヘッダ <ranges> で定義 |
||
| template< class R > using values_view = ranges::elements_view<R, 1>; |
(1) | (C++20以降) |
| namespace views { inline constexpr auto values = ranges::elements<1>; |
(2) | (C++20以降) |
タプルライクな値(例: std::tuple または std::pair)のviewを受け取り、アダプトされたビューの値型の2番目の要素の値型を持つビューを生成します。
1) ranges::elements_view<R, 1>のエイリアス。
2) RangeAdaptorObject(また、RangeAdaptorClosureObject)。 式 views::values(e) は、任意の適切な部分式 e に対して、 values_view<views::all_t<decltype((e))>>{e} と式等価です。
目次 |
[編集] 注記
values_view は、連想コンテナから値を抽出するのに役立ちます。例:
std::map<int, std::string> map{{1, "alpha"}, {2, "beta"}}; for (auto const& value : std::views::values(map)) std::cout << value << ' '; // prints: alpha beta
[編集] 例
このコードを実行
#include <iostream> #include <map> #include <ranges> int main() { const auto list = {std::pair{1, 11.1}, {2, 22.2}, {3, 33.3}}; std::cout << "pair::second values in the list: "; for (double value : list | std::views::values) std::cout << value << ' '; std::map<char, int> map{{'A', 1}, {'B', 2}, {'C', 3}, {'D', 4}, {'E', 5}}; auto odd = [](int x) { return 0 != (x & 1); }; std::cout << "\nodd values in the map: "; for (int value : map | std::views::values | std::views::filter(odd)) std::cout << value << ' '; std::cout << '\n'; }
出力
pair::second values in the list: 11.1 22.2 33.3 odd values in the map: 1 3 5
[編集] 不具合報告
以下の動作変更を伴う欠陥報告が、以前に公開されたC++標準に遡って適用されました。
| DR | 適用対象 | 公開された動作 | 正しい動作 |
|---|---|---|---|
| LWG 3563 | C++20 | keys_view は、views::all_t の使用により CTAD に参加できません。 |
views::all_t が削除されました。 |
[編集] 関連項目
| (C++20) |
ペアのような値からなるviewを取り、各ペアの最初の要素のviewを生成する(クラステンプレート) (rangeアダプタオブジェクト) |
tuple-like な値からなるviewと数値Nを取り、各タプルのN番目の要素のviewを生成する(クラステンプレート) (rangeアダプタオブジェクト) | |
| valarrayのBLAS風スライス: 開始インデックス、長さ、ストライド (class) |