Am 04.05.2022 um 21:56 schrieb Jens Maurer via Std-Discussion:
On 04/05/2022 21.43, Joey Pendergrast via Std-Discussion wrote:
I like the way that std::map gives the key and value for ranged loops:
for (auto& [key, value] : my_map)

Why don't other containers allow for the "index" to also be gotten in a similar way?

for (auto& [index, value] : any_container) would be convenient to have as well.

Or, can this be done, but I'm just unaware?  Thanks in advance.
Maybe something like

for (auto& [value, index] : std::views::zip_view(my_vector, std::views::iota_view(0, my_vector.size()))) { ...}

could work.

Jens

The correct syntax in C++23 will be:

for (auto [value, index] : std::views::zip(my_vector, std::views::iota(0)) { ... }

You have to use "auto [value, index]" or "auto&& [value, index]" as dereferencing a zip_view::iterator returns a std::pair (or std::tuple) by value.
Additionally, P2164R5 proposes std::views::enumerate for C++26.
In P2214R0 is explained, why enumerate differs from zip + iota.

Best regards,
Kilian