C++ std::set<,> operator怎么用
Posted 软件工程小施同学
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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;
以上是关于C++ std::set<,> operator怎么用的主要内容,如果未能解决你的问题,请参考以下文章
C++ std::set find 错误 operator中不能有<=
C++ std::set insert 失败 原因和解决方案 operator
如何在 C++ std::set 中放置看起来不可比较的对象?
linux C++获取两个std::set容器差异(容器元素差异)(容器元素差别)std::set_differencestd::inserter
linux C++获取两个std::set容器差异(容器元素差异)(容器元素差别)std::set_differencestd::inserter