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

ncecgwcz  于 2024-01-09  发布在  其他
关注(0)|答案(6)|浏览(188)

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

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

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

  1. warning: unused variable val [-Wunused-variable]
  2. for (auto const& [i, val] : myMap){
  3. ^


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

9avjhtql

9avjhtql1#

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

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

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

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


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

展开查看全部
fwzugrvs

fwzugrvs2#

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

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

字符串

kmbjn2e3

kmbjn2e33#

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

  1. for (auto const& [key, val] : m) {
  2. (void)val; // To avoid unused warnings
  3. // use key
  4. }

字符串

zpgglvta

zpgglvta4#

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

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

字符串

ct3nt3jp

ct3nt3jp5#

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

2guxujil

2guxujil6#

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

字符串

相关问题