遍历 C++ 17 中的映射键

Mat*_*ade 7 c++ c++17

我正在寻找一种在 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)

我想要的是找到一种方法来遍历(仅)地图的键,而忽略这些值。有谁知道该怎么做?

ein*_*ica 9

两种选择:

  1. 一个远程版本的@???????? 的回答

    for (auto const& pair : myMap) {
        auto key = pair.first;
        // etc. etc.
    }
    
    Run Code Online (Sandbox Code Playgroud)
  2. 使用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.)