地图索引的算术运算,cpp

时间:2015-04-28 18:00:13

标签: c++ dictionary stl

  1. 我编写了一个扫描目录并将其存储在map<int, string>mymap

  2. 形式的地图中的函数
  3. 目录中的所有文件名都是正整数,因此map的键是int中的文件名,值是string的实际文件名

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

    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;
    }
    
  5. 如果我执行rit++而不是++rit,我无法打印差异或排序错误。

    有没有正确的方法呢?

1 个答案:

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