地图索引上的算术运算,cpp


  1. 我编写了一个函数,该函数扫描目录并将它们存储在表单映射中 map<int, string>mymap

  2. 目录中的所有文件名都是正整数,因此map的键是int中的文件名,值是实际文件名,这是一个string

  3. 我正在尝试执行以下操作(打印地图末尾存在的值之间的连续差异)

    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,它已经是一个了。

最新更新