在c+中的无序#u映射中,仅访问对中的一个元素+; 我试图得到与C++中的锈迹破坏相同的行为。 例如:我有一个无序的_图,我想迭代。但是,我关心的唯一数据是值,而不是键

在c+中的无序#u映射中,仅访问对中的一个元素+; 我试图得到与C++中的锈迹破坏相同的行为。 例如:我有一个无序的_图,我想迭代。但是,我关心的唯一数据是值,而不是键,c++,loops,for-loop,unordered-map,value-type,C++,Loops,For Loop,Unordered Map,Value Type,有没有一种方法可以在不使用以下语法的情况下使用for循环对其进行迭代?(这就是我现在拥有的) for(自动配对:\u映射) { std::cout使用range-v3库,您可以迭代键: for (auto key : m | views::keys) // use key 或超过值: for (auto value : m | views::values) // use value 其中m可以是映射 在c++17中,您可以执行以下操作: for ([[maybe_unused]] a

有没有一种方法可以在不使用以下语法的情况下使用for循环对其进行迭代?(这就是我现在拥有的)

for(自动配对:\u映射)
{

std::cout使用range-v3库,您可以迭代键:

for (auto key : m | views::keys)
  // use key
或超过值:

for (auto value : m | views::values)
  // use value
其中
m
可以是
映射

在c++17中,您可以执行以下操作:

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

注意,属性<代码> [[ MyBuunUnEff] ] /CODE >用于抑制不使用变量之一的警告。

< P>如果编译器支持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;
}

TATMAN在很多其他语言中都可以重复使用键和值,所以在C++中,可以很好地做到这一点,在C++toRangang-V3中有“代码>视图::键< /C>”和“代码>视图::值。使用结构绑定我得到了,但简短的答案是“处理它”。长的答案是,做转换使你的生活更方便是低效的。C++被用来写快速代码,不一定是编写代码的乐趣。其他语言提供了更多的便利,比如锈,甚至更好的红宝石,但是他们经常这样做,而牺牲速度。
for ([[maybe_unused]] auto [key, value] : m)
  // use key or value
#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