(STL)std::unique函数的实现

源于《挑战程序设计竞赛》第164页程序中调用的函数unique, 今天好好看看。 

该函数std::unique位于头文件<algorithm>声明1如下:

template< class ForwardIt >
ForwardIt unique( ForwardIt first, ForwardIt last );

声明2如下:

template< class ForwardIt, class BinaryPredicate >
ForwardIt unique( ForwardIt first, ForwardIt last, BinaryPredicate p );
该函数的作用为: 删除[first, last)之间所有连续重复的元素, 只保留一个。 注意, 是连续重复。 要删除所有重复的元素, 只需要排序之后, 然后调用这个函数即可实现。 第一个版本通过==判断是否重复, 第二个版本通过二元谓词p判断是否重复。 

二元谓词p, 就是binary predicate which returns ​

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
std::map 是 C++ STL 中的一个关联容器,它提供了一种将键值与值相关联的方式。当多个线程同时访问 std::map 时,为了保证数据的正确性,需要使用读写锁进行保护。 读写锁是一种特殊的锁,它允许多个线程同时读取共享资源,但只允许一个线程进行写入操作。在 std::map 中,读操作包括查找元素和读取元素值,写操作包括插入、修改和删除元素。 在 C++11 中,可以使用 std::shared_mutex 类来实现读写锁。其中,std::shared_lock 用于读取共享资源,std::unique_lock 用于写入共享资源。 下面是一个使用 std::shared_mutex 来保护 std::map 的示例代码: ```c++ #include <map> #include <shared_mutex> std::map<int, int> my_map; std::shared_mutex my_mutex; void read_map(int key) { std::shared_lock<std::shared_mutex> lock(my_mutex); auto it = my_map.find(key); if (it != my_map.end()) { int value = it->second; // 读取元素值 } // 释放锁 } void write_map(int key, int value) { std::unique_lock<std::shared_mutex> lock(my_mutex); my_map[key] = value; // 释放锁 } ``` 在上面的代码中,read_map() 函数使用 std::shared_lock 对 my_mutex 上锁,以读取 my_map 中指定键的元素值。write_map() 函数使用 std::unique_lock 对 my_mutex 上锁,以修改 my_map 中指定键的元素值。 需要注意的是,在使用 std::shared_mutex 时,写锁对读锁是互斥的,即写锁会阻塞所有读锁和写锁。因此,在使用 std::shared_mutex 时需要注意避免死锁的情况。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值