c++ 如何修改std::map的键?

ncecgwcz  于 12个月前  发布在  其他
关注(0)|答案(6)|浏览(162)

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

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

字符串
然而,我不需要使用值val,我只需要值i。因此,代码...不包含任何对值val的调用。因此,每当我编译代码时,都会出现以下警告消息:

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


我想要的是找到一种方法来遍历(只)Map的键,忽略值。有人知道怎么做吗?

9avjhtql

9avjhtql1#

两个选项:
1.@π π ντα ε π的answer的范围版本:

for (auto const& pair : myMap) {
    auto key = pair.first;
    // etc. etc.
}

字符串
1.使用ranges-v3 library,或C++20中的std::ranges,通过将范围myMap.begin()myMap.end()投影到其第一个坐标上来调整范围。然后您可以编写如下内容:

for (auto key : std::views::keys(myMap)) {
    // etc. etc.
}


另请参阅std::views::keys。您可以通过创建一个只包含键的新容器来实现这一点,但对于较大的map来说,这可能会很昂贵。
(If你有奇怪的,沉重的键,然后const auto& key而不是auto key

fwzugrvs

fwzugrvs2#

有人知道怎么做吗?
当然!你可以使用传统的for循环和迭代器:

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

字符串

kmbjn2e3

kmbjn2e33#

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

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

  // use key
}

字符串

zpgglvta

zpgglvta4#

如何在_中使用类似 Go 的未使用变量声明:

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

字符串

ct3nt3jp

ct3nt3jp5#

for(auto const & pair:myMap)因为map内部存储的元素是std::pair格式的,所以你可以通过写,pair.first;作为key或pair.second;作为value来访问元素。

2guxujil

2guxujil6#

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

字符串

相关问题