C++ 我是否保证std::unique将保留第一个元素?

C++ 我是否保证std::unique将保留第一个元素?,c++,c++11,unique,standards,stl-algorithm,C++,C++11,Unique,Standards,Stl Algorithm,根据对第一个元素的比较,考虑排序的std::vector 现在假设我申请: 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(std::be

根据对第一个元素的比较,考虑排序的
std::vector

现在假设我申请:

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(std::begin(v),
标准::结束(v),
[](常数std::pair&x,常数std::pair&y)
{返回x.first==y.first;});
我是否保证
std::unique
将保持每个相等范围的第一个元素?

从范围[first,last]中的每个连续的等效元素组中除去除第一个元素以外的所有元素,并为该范围的新逻辑端返回一个结束迭代器

您给出的
BinaryPredicate
仅意味着
y
等于前一个元素
x
的任何元素都将被删除。

是。在第25.3.9节[alg.Unique]中说(强调我):

效果:对于非空范围,从范围[first+1,last]中迭代器i引用的每个连续的等价元素组中消除除第一个元素以外的所有元素,对于该范围,以下条件适用:*(i-1)==i或pred((i-1),*i)!=false

此处引用本标准很重要,因为这一点上的常见互联网来源给出了两种不同的答案:en.cppreference.com不提供担保,但cplusplus.com(引用人提供担保)