考虑基于pair的第一个元素的比较排序的std::vector<std::pair<int, int>>
。
现在假设我应用:
std::unique(std::begin(v),
std::end(v),
[](const std::pair<int, int>& x, const std::pair<int, int>& y)
{return x.first == y.first;});
我能保证std::unique
将保留每个相等范围的第一个元素吗?
是。
从范围[first, last)中每一组连续相等的元素中除去除第一个元素外的所有元素,并为范围的新逻辑末端返回一个过尾迭代器。
。
您所给出的BinaryPredicate
只是意味着y
等于前一个元素x
的任何元素将被删除。
是。c++ 14标准草案在第25.3.9节中说。(强调我的):
效果:对于非空范围,从迭代器i所指向的[first + 1,last]范围内的每个连续等效元素组中除去第一个元素之外的所有元素,满足以下条件:*(i - 1) == i或pred((i - 1), *i) != false。
标准的引用在这里很重要,因为通常的互联网来源在这一点上给出了两个不同的答案:en.cppreference.com不提供保证,但cplusplus.com(上面引用的Ben有保证)