【C++】STL 容器 - set 集合容器 ⑦ ( 查找元素 - set#find 函数 | 获取元素个数 - set#count 函数 )

2023-12-31 08:08:30 浏览数 (1)

文章目录
  • 一、查找元素 - set#find 函数
    • 1、函数原型 简介
    • 2、代码示例 - set#find 函数
  • 二、获取元素个数 - set#count 函数
    • 1、函数原型 简介
    • 2、代码示例 - set#find 函数

一、查找元素 - set#find 函数


1、函数原型 简介

在 C 语言的 STL 标准模板库 , std::set 集合容器 是一个存储唯一元素的容器 , 该容器的底层使用 红黑树 数据结构 实现 ; std::set 容器是有序的 , 存储元素时 会自动按指定规则进行排序 ;

std::set 集合容器类 提供了一个 find 成员函数 , 用于查找 集合容器中 指定值的元素 ;

std::set#find() 函数原型 如下 :

代码语言:javascript复制
iterator find(const key_type& k) const;
  • 参数解析 :
    • 元素类型 : 参数类型 key_type 是 std::set 集合容器 元素类型 ;
    • 引用类型 : 为了避免二次拷贝 , 使用该元素类型的 引用类型 key_type& 作为参数类型 ;
  • 返回值解析 :
    • 找到指定元素 : 该 find 函数返回一个迭代器 , 该 迭代器指向找到的元素 ;
    • 没有找到元素 : 如果在 std::set 集合容器中 , 没有找到指定元素 , 则返回 指向集合末尾的迭代器 , 即 std::set::end() 迭代器 , 该迭代器不指向任何元素 , 指向最后一个元素的后一个位置 ;

2、代码示例 - set#find 函数

在下面的代码示例中 ,

首先 , 创建了一个包含整数 1 到 5 的 std::set 集合容器 ,

代码语言:javascript复制
    // 初始化
    set<int> mySet = { 1, 2, 3, 4, 5 };

然后 , 使用 find 函数查找整数 3 ;

代码语言:javascript复制
    // 调用 
    auto it = mySet.find(3);

最后 , 如果找到 整数 3 , 迭代器指向找到的元素 , 如果没有找到元素 , 迭代器指向末尾位置 ; 可以根据判断 返回的 迭代器是否等于 mySet.end() 值确定 ,

  • 如果等于该 末尾迭代器 值 , 说明没有找到元素 ;
  • 如果不等于该 末尾迭代器 值 , 说明找到了元素 ;
代码语言:javascript复制
    // 如果找到元素, 迭代器指向找到的元素
    // 如果没有找到元素 , 迭代器指向末尾位置
    if (it != mySet.end()) {
        cout << "找到元素 : " << *it << endl;
    }
    else {
        cout << "未找到元素 "<< endl;
    }

代码示例 :

代码语言:javascript复制
#include "iostream"
using namespace std;
#include "set"

int main() {

    // 初始化
    set<int> mySet = { 1, 2, 3, 4, 5 };

    // 调用 
    auto it = mySet.find(3);

    // 如果找到元素, 迭代器指向找到的元素
    // 如果没有找到元素 , 迭代器指向末尾位置
    if (it != mySet.end()) {
        cout << "找到元素 : " << *it << endl;
    }
    else {
        cout << "未找到元素 "<< endl;
    }


	// 控制台暂停 , 按任意键继续向后执行
	system("pause");

	return 0;
};

执行结果 :

找到元素 : 3 请按任意键继续. . .

二、获取元素个数 - set#count 函数


1、函数原型 简介

std::set 集合容器 中的每个元素都是唯一的 , 对于任何元素 , 它 在集合中要么存在 , 要么不存在 , 这意味着其计数只能是 0 或 1 ;

在 std::multiset 集合容器 中 , 统计元素个数是有意义的 ;

std::set 集合容器类 提供了一个 count 成员函数 , 用于确定集合中特定元素的数量 ;

  • 对于 std::set 来说 获取的结果只能是 0 或 1 ;
  • 对于 std::multiset 容器 , 可以获取元素的个数 ;

这是为了保持与其他 关联容器的接口一致性 , 如 : std::multiset 容器 , std::set 也提供了这个函数接口 ;

count 函数原型如下 :

代码语言:javascript复制
size_type count(const key_type& k) const;
  • 参数解析 :
    • 元素类型 : 参数类型 key_type 是 std::set 集合容器 元素类型 ;
    • 引用类型 : 为了避免二次拷贝 , 使用该元素类型的 引用类型 key_type& 作为参数类型 ;
  • 返回值解析 : 该函数返回 size_type 无符号整数类型 , 表示指定元素 k 的数量 ;
    • 如果 set 容器中 存在该值 , 返回 1 ;
    • 如果 set 容器中 不存在该值 , 返回 0 ;

2、代码示例 - set#find 函数

在下面的代码中 , 使用 count 函数来检查整数元素 3 是否存在于集合中 , 由于 std::set 集合容器可以保证元素的唯一性 ,

  • 如果元素存在 , count 函数将返回 1 ;
  • 如果元素不存在 , count 函数将返回 0 ;

代码示例 :

代码语言:javascript复制
#include "iostream"
using namespace std;
#include "set"

int main() {

    // 初始化
    set<int> mySet = { 1, 2, 3, 4, 5 };

    // 获取元素 3 的个数
    auto count = mySet.count(3);

    // 获取元素 6 的个数
    auto count2 = mySet.count(6);

    cout << "元素3 : " << count << endl;
    cout << "元素6 : " << count2 << endl;


	// 控制台暂停 , 按任意键继续向后执行
	system("pause");

	return 0;
};

执行结果 :

元素3 : 1 元素6 : 0 请按任意键继续. . .

0 人点赞