我编写了一个扫描目录并将其存储在map<int, string>mymap
目录中的所有文件名都是正整数,因此map的键是int
中的文件名,值是string
的实际文件名
我正在尝试执行以下操作(打印地图末尾的值之间的连续差异)
map<int, string>::reverse_iterator rit = file_map.rbegin();
int size = file_map.size();
// trying to find the consecutive difference between indices
for ( int i = size; i>1 ; i--) {
cout << " diff is " <<(int) (rit->first) - (int)((++rit)->first) << endl;
}
如果我执行rit++
而不是++rit
,我无法打印差异或排序错误。
有没有正确的方法呢?
答案 0 :(得分:2)
我假设你没有使用C ++ 11,所以让我们添加我们自己的std::next
版本:
template<class ForwardIt>
ForwardIt next(ForwardIt it,
typename std::iterator_traits<ForwardIt>::difference_type n = 1)
{
std::advance(it, n);
return it;
}
有了这个,我们可以向前迭代:
if (file_map.size() >= 2) {
map<int, string>::iterator it = file_map.begin();
map<int, string>::iterator end = next(file_map.end(), -1);
for (; it != end; ++it) {
cout << " diff is " << next(it)->first - it->first << endl;
}
}
您不需要将first
投射到int
,它已经是一个。