在c++中,只访问一个无序映射中的一对元素中的一个



我正试图获得与C++中的rust元组析构函数相同的行为。例如:我有一个我想迭代的无序映射。然而,我唯一关心的数据是值,而不是键。

有没有一种方法可以在不使用以下语法的情况下使用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++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;
}

程序输出为

second first 

使用range-v3库,您可以迭代密钥:

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

或超过值:

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

其中CCD_ 1可以是CCD_。

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

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

请注意,属性[[maybe_unused]]用于抑制关于不使用其中一个变量的警告。

相关内容

最新更新