10019set04查找和统计

168 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第8天,点击查看活动详情

1.1 set查找和统计

功能描述:

  • 对set容器进行查找数据以及统计数据

1.2 函数原型:

  • find(key); //查找key是否存在,若存在,返回该键的元素的迭代器;若不存在,返回set.end();
  • count(key); //统计key的元素个数

1.3 代码示例:

#include <set>

//查找和统计
void test01()
{
	set<int> s1;
	//插入
	s1.insert(10);
	s1.insert(30);
	s1.insert(20);
	s1.insert(40);
	
	//查找
	set<int>::iterator pos = s1.find(30);

	if (pos != s1.end())
	{
		cout << "找到了元素 : " << *pos << endl;
	}
	else
	{
		cout << "未找到元素" << endl;
	}

	//统计
	int num = s1.count(30);
	cout << "num = " << num << endl;
}

int main() {

	test01();

	system("pause");

	return 0;
}
复制代码

1.4 总结:

  • 查找 --- find (返回的是迭代器)
  • 统计 --- count (对于set,结果为0或者1)

set是STL中一种标准关联容器。

它底层使用平衡的搜索树——红黑树实现,插入删除操作时仅仅需要指针操作节点即可完成,不涉及到内存移动和拷贝,所以效率比较高。

set,顾名思义是“集合”的意思,在set中元素都是唯一的,而且默认情况下会对元素自动进行升序排列,支持集合的交(set_intersection),差(set_difference) 并(set_union),对称差(set_symmetric_difference) 等一些集合上的操作,如果需要集合中的元素允许重复那么可以使用multiset。

注意事项

    1. set.end() 指向set容器的最后一个元素的下一个位置的迭代
    1. 对于 set容器而言,set.count(elem)结果要么是0,要么是1

1.5 关于std::set的一些补充

std::set在存储自定义结构时,要重载operator用于查找时使用,比较关键字即可。
比如在PAT甲级1012中的应用。而在查找时,std::set只比较重载运算符中比较的关键字,忽略其他的成分。