如何正确地使用 std::sort 和 std::unique 来移除 std::vector 中的重复元素并统计出重复元素的个数:

#include <iostream>  
#include <vector>  
#include <algorithm>  
  
int main() {  
    std::vector<int> a = {4, 2, 2, 8, 5, 5, 7};  
  
    // 先对容器进行排序  
    std::sort(a.begin(), a.end());  
  
    // 使用 std::unique 移除连续重复的元素  
    a.erase(std::unique(a.begin(), a.end()), a.end());  
  
    // 现在 a只包含不重复的元素,并且已经排序  
    for (int x : a) {  
        std::cout << x << ' ';  
    }  
  
    return 0;  
}

在C++中,当你使用std::unique算法结合容器(如std::vector)来删除重复元素时,实际上并没有直接得到一个表示删除了多少个重复元素的整数值。但是,你可以通过比较std::unique返回的迭代器与容器末尾的迭代器来计算出被“逻辑上删除”(即移动到容器末尾并准备被erase)的元素个数。

这里是一个示例,展示了如何计算并输出通过std::uniqueerase删除的重复元素个数:

#include <iostream>  
#include <vector>  
#include <algorithm> // 包含 std::unique 和 std::sort  
  
int main() {  
    std::vector<int> vec = {1, 2, 2, 3, 4, 4, 4, 5};  
  
    // 排序是必需的,因为std::unique只能移除连续的重复元素  
    std::sort(vec.begin(), vec.end());  
  
    // 使用std::unique  
    auto last = std::unique(vec.begin(), vec.end());  
  
    // 计算并输出删除的重复元素个数  
    size_t removed_count = vec.end() - last; // 容器末尾到last的距离  
    std::cout << "Removed " << removed_count << " duplicate elements." << std::endl;  
  
    // 真正地从容器中删除这些元素  
    vec.erase(last, vec.end());  
  
    // 输出处理后的容器  
    std::cout << "After removing duplicates: ";  
    for (int num : vec) {  
        std::cout << num << ' ';  
    }  
    std::cout << std::endl;  
  
    return 0;  
}

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值