繁体   English   中英

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

[英]Access only one element of a pair in an unordered_map in c++

我试图在 C++ 中获得与 rust 元组解构相同的行为。 例如:我有一个想要迭代的 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.
}

使用 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]]用于抑制有关不使用其中一个变量的警告。

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

#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;
}

程序 output 是

second first 

暂无
暂无

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

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