当前位置: 首页 > news >正文

set 的 contains

语法:

set<int> num_set;

st.contains(num);

在 C++ 中,!num_set.contains(num - 1) 这行代码通常用于检查一个集合(num_set)中是否不存在某个值(num - 1)。以下是对这行代码的详细解释:

  1. num_setnum_set 应该是一个支持 contains 成员函数的集合类对象,比如 std::set 或 std::unordered_set。这些容器用于存储唯一的元素,并且提供了快速的查找操作。

  2. contains 函数contains 是 std::set 和 std::unordered_set 等容器的成员函数,用于检查容器中是否包含指定的元素。它接受一个参数(这里是 num - 1),并返回一个布尔值。如果容器中包含该元素,则返回 true;否则返回 false

  3. num - 1:这是传递给 contains 函数的参数,表示要在集合中查找的元素。它是 num 减去 1 后的结果。

  4. ! 运算符:这是逻辑非运算符,它将 contains 函数返回的布尔值取反。如果 contains(num - 1) 返回 true(即集合中包含 num - 1 这个元素),那么 !num_set.contains(num - 1) 就会返回 false;反之,如果 contains(num - 1) 返回 false(即集合中不包含 num - 1 这个元素),那么 !num_set.contains(num - 1) 就会返回 true

.contains()用法拓展:

contains 方法在 C++ 标准库中的关联容器(如 std::setstd::mapstd::unordered_setstd::unordered_map)以及 C++20 引入的范围库等场景中有多种用途,下面为你详细介绍除检查数字是否存在之外的一些用法。

1. 检查自定义类型对象是否存在

如果你使用自定义类型作为容器元素,也可以使用 contains 来检查容器中是否存在某个特定的对象。不过,需要确保自定义类型正确重载了比较运算符(对于 std::setstd::map)或者提供了哈希函数(对于 std::unordered_setstd::unordered_map)。

#include <iostream>
#include <unordered_set>
#include <string>

// 自定义类型
class Person {
public:
    Person(const std::string& name, int age) : name(name), age(age) {}

    // 重载 == 运算符,用于 unordered_set 比较元素
    bool operator==(const Person& other) const {
        return name == other.name && age == other.age;
    }

    std::string name;
    int age;
};

// 自定义哈希函数
struct PersonHash {
    std::size_t operator()(const Person& p) const {
        return std::hash<std::string>()(p.name) ^ std::hash<int>()(p.age);
    }
};

int main() {
    std::unordered_set<Person, PersonHash> personSet;
    personSet.insert(Person("Alice", 25));
    personSet.insert(Person("Bob", 30));

    if (personSet.contains(Person("Alice", 25))) {
        std::cout << "Found Alice!" << std::endl;
    }

    return 0;
}

在上述代码中,定义了自定义类型 Person,并重载了 == 运算符,同时提供了自定义哈希函数 PersonHash,这样就能使用 contains 方法检查 std::unordered_set 中是否存在特定的 Person 对象。

2. 在 std::map 中检查键是否存在

std::map 和 std::unordered_map 的 contains 方法用于检查指定的键是否存在于映射中,这在处理键值对数据时非常有用。

#include <iostream>
#include <map>
#include <string>

int main() {
    std::map<std::string, int> scores;
    scores["Alice"] = 90;
    scores["Bob"] = 85;

    if (scores.contains("Alice")) {
        std::cout << "Alice's score is: " << scores["Alice"] << std::endl;
    }

    return 0;
}

此代码通过 contains 方法检查 std::map 中是否存在键 "Alice",若存在则输出对应的值。

3. 结合范围库进行元素检查

在 C++20 及以后版本,范围库提供了强大的功能,contains 也可以和范围库一起使用来检查范围中是否包含特定元素。

#include <iostream>
#include <ranges>
#include <vector>

int main() {
    std::vector<int> numbers = {1, 2, 3, 4, 5};
    auto evenNumbers = numbers | std::views::filter([](int n) { return n % 2 == 0; });

    if (std::ranges::contains(evenNumbers, 4)) {
        std::cout << "The range of even numbers contains 4." << std::endl;
    }

    return 0;
}

这里使用范围库对 std::vector 进行过滤得到偶数序列,然后使用 std::ranges::contains 检查该序列中是否包含数字 4

4. 处理字符串集合

在处理字符串集合时,contains 可以用于检查某个字符串是否在集合中。

#include <iostream>
#include <unordered_set>
#include <string>

int main() {
    std::unordered_set<std::string> words = {"apple", "banana", "cherry"};

    if (words.contains("banana")) {
        std::cout << "The set contains 'banana'." << std::endl;
    }

    return 0;
}

代码中使用 std::unordered_set 存储字符串,通过 contains 检查集合中是否存在字符串 "banana"

相关文章:

  • C++(20)—类和对象(下) ⑤内部类
  • MQTT协议:IoT通信的轻量级选手
  • 无锡无人机超视距驾驶证怎么考?
  • 【Linux】ubuntu环境变量配置以及shell配置文件编写
  • Gson、Fastjson 和 Jackson 对比解析
  • WebChat 一款非常好用的浏览器侧边栏 AI 问答插件
  • C_内存 内存地址概念
  • 【Go】windows下的Go安装与配置,并运行第一个Go程序
  • 图像处理中的 Gaussina Blur 和 SIFT 算法
  • PCL中的数据格式
  • 【数据结构】包装类和泛型
  • InnoDB 如何解决幻读:深入解析与 Java 实践
  • AI制作PPT,如何轻松打造高效演示文稿
  • Java结合Swing处理Dicom图像集,实现翻页、左侧缩略图、窗宽位调整
  • Windows 11 PowerShell重定向文本文件的编码问题
  • 3.3.1 spdlog异步日志
  • 3.1.3.3 Spring Boot使用Filter组件
  • 二分答案----
  • BeautifulSoup 踩坑笔记:SVG 显示异常的真正原因
  • unity曲线射击
  • 做网站怎样收费的/可以免费发广告的网站有哪些
  • 呼和浩特网站推广公司/关键词排名软件
  • 阳江本地网络平台/百度sem优化师
  • 泉州网站开发建设/软文发布平台哪个好
  • 公司网站备案需要什么/成都疫情最新消息
  • 建筑工程电影网/关键词优化如何做