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(引用人提供担保)