gpt4 book ai didi

c++ - map 索引的算术运算,cpp

转载 作者:搜寻专家 更新时间:2023-10-31 02:22:49 25 4
gpt4 key购买 nike

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

  2. 目录中的所有文件名都是正整数,因此映射的键是int中的文件名。值是实际文件名,即 string

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

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

关于c++ - map 索引的算术运算,cpp,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29926675/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com