C++语法基础之STL集合类

落花浮王杯 提交于 2020-02-07 05:03:58

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()

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!