仅访问c ++中unordered_map中的一对元素中的一个

问题描述 投票:2回答:2

我正在尝试获得与C ++中的rust tuple解构相同的行为。例如:我有一个unordered_map要迭代。但是,我唯一关心的数据是值,而不是键。

是否有一种方法可以使用for循环对其进行迭代,而无需使用以下语法? (这是我目前拥有的)

for (auto &pair : _map)
{
   std::cout << pair.second << std::endl;
}

我想得到这样的东西:

for (auto &value : _map)
{
   std::cout << value << std::endl; // This would give me the value and not a pair with key and value.
}

祝您有美好的一天:)

c++ loops for-loop unordered-map value-type
2个回答
2
投票

使用range-v3库,您可以遍历键:

for (auto key : m | views::keys)
  // use key

或超过值:

for (auto value : m | views::values)
  // use value

其中m可以是map

在c ++ 17中,您可以这样做:

for ([[maybe_unused]] auto [key, value] : m)
  // use key or value

注意,属性[[maybe_unused]]用于禁止显示有关不使用变量之一的警告。


2
投票

如果您的编译器支持C ++ 17 Standard,那么您可以编写如下内容:>

#include <iostream>
#include <unordered_map>
#include <string>

int main() 
{
    std::unordered_map<int, std::string> m =
    {
        { 1, "first" },
        { 2, "second" }
    };

    for ( const auto &[key, value] : m )
    {        
        std::cout << value << ' ';
    }
    std::cout << '\n';

    return 0;
}

程序输出为

second first 
© www.soinside.com 2019 - 2024. All rights reserved.