C++ std::set<,> operator怎么用

std::set

  • 不重复key
  • 默认less排序

STL中的关联容器: std::set

template<
    class Key,
    class Compare = std::less<Key>,
    class Allocator = std::allocator<Key>
> class set;

std::set 是关联容器,含有 Key 类型对象的已排序集

它的key就是value,value就key,key不能重复,所以不能通过set的迭代器来改变set中元素的值。

用比较函数 比较 (Compare) 进行排序。搜索、移除和插入拥有对数复杂度。 set 通常以红黑树实现。

在每个标准库使用比较 (Compare) 概念的场所,用等价关系确定唯一性。不精确地说,若二个对象 a 与 b 相互间既不比较大于亦不比较小于: !comp(a, b) && !comp(b, a) ,则认为它们等价。


set有一个重要的特性:进行元素的插入或删除之后,原来的迭代器依然有效。
set的底层结构是红黑树。

上面的Compare应该是一个functor(仿函数), 重载了()操作符,用于set内元素的排序。

使用示例:

class lex_compare {
    bool operator ()(const int64_t& lhs, cosnt int64_t& rhs) {
        stringstream s1, s2;
        s1 << lhs;
        s2 << rhs;
        return s1.str() < s2.str();
    }
};

std::set<int64_t, lex_compare> s;

再如

struct transactionCompare
{
    bool operator()(dev::eth::Transaction::Ptr _first, dev::eth::Transaction::Ptr _second) const
    {
        return _first->importTime() <= _second->importTime();
    }
};

    
/// transaction queue, 按照导入时间从小到大排序
using TransactionQueue = std::set<dev::eth::Transaction::Ptr, transactionCompare>;
// 交易池存储交易的队列
TransactionQueue m_txsQueue;

https://www.cnblogs.com/bugchecker/p/guide_of_stl_set.html

https://www.apiref.com/cpp-zh/cpp/container/set.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

软件工程小施同学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值