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

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

C++语法基础之STL集合类C++语法基础之STL集合类 Mrs_Two 发布了10 篇原创文章 · 获赞 0 · 访问量 239 私信 关注
上一篇:STL常用操作:multiset


下一篇:STL(标准模板库)笔记——平衡二叉树multiset