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?
Does anyone have any idea how to do it?
Sure! You can just use a traditional for
loop with an iterator:
for(auto it = myMap.begin(); it != myMap.end(); ++it) {
auto i = it->first;
// ...
}
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 : keys_of(myMap) ) {
// etc. etc.
}
you can do this without ranges if keys_of()
materializes all of 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
.)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With