0

我有以下示例程序:

#include <iostream>
#include <string>
#include <map>

int main()
{
  std::map<int, int> a;
  a[8] = 1;
  a[5] = 1;
  a[1] = 1;
  a[2] = 1;

  std::cout << a.begin()->first << std::endl;

  std::cout << a.rbegin()->first << std::endl;
  std::cout << (++a.rbegin())->first << std::endl;
  std::cout << (--a.rbegin())->first << std::endl;

  std::cout << (a.lower_bound(6))->first << std::endl;
}

当我执行它时,我得到这个输出:

1
8
5
5
8

我有两个问题。首先是为什么++a.rbegin()--a.rbegin()迭代在同一个方向?a.rbegin()迭代器不是从双向迭代器返回的吗?

第二个问题是为什么a.lower_bound(6)->first返回 8 而不是 5?基于https://en.cppreference.com/w/cpp/container/map/lower_bound,它应该返回一个迭代器到第一个元素“不小于键”。所以我会认为 5 会因为 8 > 6 而返回。

4

1 回答 1

2

--a.rbegin() 是一个 UB。

lower_bound(val)返回一个迭代器,该迭代器指向范围内不小于 的第一个元素 val5不是“不小于”,因此您可以正确6获取迭代器8

于 2019-07-10T20:33:11.170 回答