I am looking for a way to iterate through the keys of a map in C++ 17. The way that I have in mind right now is based on the answer of this question, the way is presented below.
for (auto const& [i, val] : myMap)
...
However, I do not need to use the value val
, I just need the value i
. Therefore, the piece of code ...
does not contain any call to the value val
. Consequently, whenever I compile the code, the following warning message appears:
warning: unused variable ‘val’ [-Wunused-variable]
for (auto const& [i, val] : myMap){
^
What I want is to find a way to iterate through (only) the keys of the map, ignoring the values. Does anyone have any idea how to do it?
Two options:
A ranged-for version of @πάνταῥεῖ 's answer:
for (auto const& pair : myMap) {
auto key = pair.first;
// etc. etc.
}
Use the ranges-v3 library, or std::ranges
in C++20, to adapt the range myMap.begin()
and myMap.end()
by projecting it onto its first coordinate. Then you'd write something like:
for (auto key : std::views::keys(myMap)) {
// etc. etc.
}
See also std::views::keys
.
You can do this without ranges by creating a new container which only contains the keys, but that could be expensive for a larger map.
(If you have weird, heavy keys, then const auto& key
instead of auto key
.)