C++20 引入了views::elements
,views::keys
和views::values
来轻松处理类似元组的值的范围:
std::vector v{std::tuple{'A', 1}, {'B', 2}, {'C', 3}};
auto it = std::ranges::find(v | std::views::elements<0>, 'B');
assert(*it == 'B');
应用适配器后,v | std::views::elements<0>
成为每个元组的第一个元素的范围,因此返回类型ranges::find
是该转换范围的迭代器类型。
但是有没有一种可能的方法可以转换it
回原始迭代器类型以获取原始元组?
assert(*magic_revert(it) == std::tuple{'B', 2});