[英]Iterating through map keys in C++ 17
我正在寻找一种在 C++ 17 中遍历映射键的方法。我现在想到的方法是基于这个问题的答案,方法如下所示。
for (auto const& [i, val] : myMap)
...
但是,我不需要使用值val
,我只需要值i
。 因此,这段代码...
不包含对值val
任何调用。 因此,每当我编译代码时,都会出现以下警告消息:
warning: unused variable ‘val’ [-Wunused-variable]
for (auto const& [i, val] : myMap){
^
我想要的是找到一种方法来遍历(仅)地图的键,而忽略这些值。 有谁知道该怎么做?
两种选择:
@πάνταῥεῖ答案的范围版本:
for (auto const& pair : myMap) { auto key = pair.first; // etc. etc. }
使用range-v3 库(或 C++20 中的std::ranges
)通过将范围投影到其第一个坐标来调整范围myMap.begin()
和myMap.end()
。 然后你会写这样的东西:
for (auto key : keys_of(myMap) ) { // etc. etc. }
如果keys_of()
实现了所有键,则可以在没有范围的情况下执行此操作,但这对于更大的地图来说可能会很昂贵。
(如果你有奇怪的重键,那么const auto& key
而不是auto key
。)
有谁知道该怎么做?
当然! 您可以只使用带有迭代器的传统for
循环:
for(auto it = myMap.begin(); it != myMap.end(); ++it) {
auto i = it->first;
// ...
}
如何使用带有_
类似Go的未使用变量声明:
for(auto const& [i, _] : myMap)
...
您可以通过强制转换为void
来避免未使用的警告:
for (auto const& [key, val] : m) {
(void)val; // To avoid unused warnings
// use key
}
for(auto const & pair : myMap) 因为映射内部以 std::pair 格式存储元素,因此您可以通过写入 pair.first; 来访问元素。 用于 key 或 pair.second; 为价值。
for (auto& [key, std::ignore] : m) {
// use key
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.