本文主要是介绍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
这篇关于C++ std::set<,> operator怎么用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!