在 c++ 中迭代对列表的正确方法?

Correct way to iterate over a list of pairs in c++?

本文关键字:方法 列表 c++ 迭代      更新时间:2023-10-16

我创建了一个unordered_maps对的列表,如下所示:

list<pair<int, unordered_map<int, bool>>> calc;

我正在尝试从右到左迭代列表,如下所示:

for (list<int>::reverse_iterator rit = calc.rbegin(); rit != calc.rend(); ++rit) 
{
int d = n - (*rit).first;
}

但是以上是错误的消息"request for member ‘first’ in ‘rit.std::reverse_iterator<_Iterator>::operator*<std::_List_iterator<int> >()’, which is of non-class type ‘int’

我在这里缺少一些语法吗?

list<int>::reverse_iterator rit = calc.rbegin();

不正确。它需要

list<pair<int, unordered_map<int, bool>>>::reverse_iterator rit = calc.rbegin();

您可以简化生活并使用:

auto rit = calc.rbegin();

正确的语法是:

using List = list<pair<int, unordered_map<int, bool>>>;
List calc;
for (List::reverse_iterator rit = calc.rbegin(); rit != calc.rend(); ++rit) 
{
int d = n - (*rit).first;
}

您可以使用auto而不是List::reverse_iterator