在 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;
}
程序输出为
second first
我正在尝试获得与 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;
}
程序输出为
second first