set 和 multiset
头文件:< set >
内部使用类似二叉树的方式实现,不能够替换或者直接修改指定位置的元素,但是能够对元素进行排序并实现快速查找建。
- 实例化
默认谓词:std::less,实现升序排列
实例化一个升序排列的set或者multiset(也可以直接greater< type >)
// used as a template parameter in set / multiset instantiation
template <typename T>
struct SortDescending{
bool operator()(const T& lhs, const T& rhs) const{
return (lhs > rhs);
}
};
set <int, SortDescending<int>> setInts;
multiset <int, SortDescending<int>> msetInts;
此外,还可以直接使用其他set、multiset、vector、list或者其他STL容器初始化
- 插入
使用成员函数insert()
参数是要插入的值或者指定范围
setInts.insert (-1);
msetInts.insert (setInts.begin (), setInts.end ());
可以使用multiset::count(value),确定包含多少个这样的元素
-
查找
find(),返回迭代器,与end()进行比较
在multiset中,函数查找第一个与给定键匹配的元素,相同值的元素在相邻位置存储,所有可以通过加减迭代器count()-1次找到所有指定值的元素。 -
删除
clear(),可以清空内容
erase()重载版本
setObject.erase (key);
setObject.erase (element);//element为迭代器
setObject.erase (iLowerBound, iUpperBound);
在multiset中,使用第一个版本,会删除所有值为key的元素,若想只清除一个元素使用迭代器版本
将对象存储在set或者multiset中,需要实现运算符< 和 ==,前者是排序谓词后者将用于find()等函数
示例:
struct ContactItem{
string name;
string phoneNum;
string displayAs;
// used by set::find() given contact list item
bool operator == (const ContactItem& itemToCompare) const
{
return (itemToCompare.name == this->name);
}
// used to sort
bool operator < (const ContactItem& itemToCompare) const
{
return (this->name < itemToCompare.name);
}
// Used in DisplayContents via cout
operator const char*() const
{
return displayAs.c_str();
}
};
unordered_set 和 unordered_multiset
头文件< unordered_set>,包含一个确定排序顺序的散列函数
常用方法和set 与 multiset基本相同
包含max_bucket_count()、load_factor()、max_load_factor()
来源:CSDN
作者:Mrs_Two
链接:https://blog.csdn.net/Mrs_Two/article/details/104176216