-
我编写了一个函数,该函数扫描目录并将它们存储在表单映射中
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
,排序就会错误。
有没有正确的方法?
我假设您没有使用 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
,它已经是一个了。