我正在尝试获得与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.
}
祝您有美好的一天:)
使用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 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