我正在寻找一种在 C++ 17 中遍历映射键的方法。我现在想到的方法是基于这个问题的答案,方法如下所示。
for (auto const& [i, val] : myMap)
...
Run Code Online (Sandbox Code Playgroud)
但是,我不需要使用 value val,我只需要 value i。因此,这段代码...不包含对 value 的任何调用val。因此,每当我编译代码时,都会出现以下警告消息:
warning: unused variable ‘val’ [-Wunused-variable]
for (auto const& [i, val] : myMap){
^
Run Code Online (Sandbox Code Playgroud)
我想要的是找到一种方法来遍历(仅)地图的键,而忽略这些值。有谁知道该怎么做?
两种选择:
一个远程版本的@???????? 的回答:
for (auto const& pair : myMap) {
auto key = pair.first;
// etc. etc.
}
Run Code Online (Sandbox Code Playgroud)使用range-v3 库(或std::ranges在 C++20 中)调整范围myMap.begin()并将myMap.end()其投影到其第一个坐标上。然后你会写这样的东西:
for (auto key : keys_of(myMap) ) {
// etc. etc.
}
Run Code Online (Sandbox Code Playgroud)
如果keys_of()实现所有键,您可以在没有范围的情况下执行此操作,但是对于更大的地图来说这可能会很昂贵。
(如果你有奇怪的、沉重的键,那么const auto& key代替auto key.)