繁体   English   中英

遍历 C++ 17 中的映射键

[英]Iterating through map keys in C++ 17

我正在寻找一种在 C++ 17 中遍历映射键的方法。我现在想到的方法是基于这个问题的答案,方法如下所示。

for (auto const& [i, val] : myMap)
...

但是,我不需要使用值val ,我只需要值i 因此,这段代码...不包含对值val任何调用。 因此,每当我编译代码时,都会出现以下警告消息:

warning: unused variable ‘val’ [-Wunused-variable]
         for (auto const& [i, val] : myMap){
                                  ^

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

两种选择:

  1. @πάνταῥεῖ答案的范围版本:

     for (auto const& pair : myMap) { auto key = pair.first; // etc. etc. }
  2. 使用range-v3 库(或 C++20 中的std::ranges )通过将范围投影到其第一个坐标来调整范围myMap.begin()myMap.end() 然后你会写这样的东西:

     for (auto key : keys_of(myMap) ) { // etc. etc. }

    如果keys_of()实现了所有键,则可以在没有范围的情况下执行此操作,但这对于更大的地图来说可能会很昂贵。

    (如果你有奇怪的重键,那么const auto& key而不是auto key 。)

有谁知道该怎么做?

当然! 您可以只使用带有迭代器的传统for循环:

for(auto it = myMap.begin(); it != myMap.end(); ++it) {
    auto i = it->first;
    // ...
}

如何使用带有_类似Go的未使用变量声明:

for(auto const& [i, _] : myMap)
...

您可以通过强制转换为void来避免未使用的警告:

for (auto const& [key, val] : m) {
  (void)val;  // To avoid unused warnings

  // use key
}

for(auto const & pair : myMap) 因为映射内部以 std::pair 格式存储元素,因此您可以通过写入 pair.first; 来访问元素。 用于 key 或 pair.second; 为价值。

for (auto& [key, std::ignore] : m) {
  // use key
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM