我能保证std::unique将保留第一个元素吗?



考虑基于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有保证)

相关内容

最新更新