C++ set到底是什么

C++的set是一个标准库中的容器,提供了有序关联容器的功能。一个set中的元素是按照特定的顺序排列的,并且每个元素只能在set中出现一次,而且这个元素的值可以作为关键字来使用。下面我们将详细介绍set的主要功能和应用。

1. set的定义和基本操作

定义一个set

定义一个set需要包含头文件<set>,同时set是一个泛型类,可以为任意类型定义一个set对象,set中的元素必须是可比较的(比如可以进行小于、大于等比较操作),在定义时还可以传入比较器来实现自定义排序。

#include <set>

//定义set<int>类型的对象
std::set<int> intSet;

//定义自定义排序的set<string>类型对象
struct cmp {
    bool operator() (const string& a, const string& b) const {
        return a.size() < b.size();
    }
}
std::set<string, cmp> strSet;

set的插入和删除操作

set中的元素是按序进行存储的,因此无法使用数组的形式进行访问元素。set提供insert和erase方法来插入和删除元素。

//插入元素1, 2, 3
intSet.insert(1);
intSet.insert(2);
intSet.insert(3);

//删除元素2
intSet.erase(2); 

set的遍历

set中的元素是有序的,默认是按照从小到大的顺序排序的,我们可以使用迭代器对它进行遍历。

//遍历输出set中所有元素
for(auto it = intSet.begin(); it != intSet.end(); it++) {
    std::cout << *it << " ";
}
//输出结果:1 3

2. set的高级应用

2.1 统计单词个数

假设我们有一篇英文文章,我们需要统计每个单词出现的次数。

#include <iostream>
#include <set>
#include <string>

int main() {
    std::string article = "This is a test article for test the usage of C++ set";
    std::set<std::string> wordSet;
    std::string word = "";
    for(int i = 0; i < article.length(); i++) {
        if(article[i] == ' ' || article[i] == '.') {
            //如果单词已经结束,则插入到set中
            if(!word.empty()) {
                wordSet.insert(word);
                word = "";
            }
        } else {
            word += article[i];
        }
    }
    for(auto it = wordSet.begin(); it != wordSet.end(); it++) {
        std::cout << "单词 " << *it << " 出现次数为:" << wordSet.count(*it) << std::endl;
    }
    return 0;
}

//输出结果:
/*
单词 C++ 出现次数为:1
单词 This 出现次数为:1
单词 a 出现次数为:1
单词 article 出现次数为:1
单词 for 出现次数为:1
单词 is 出现次数为:1
单词 of 出现次数为:1
单词 set 出现次数为:1
单词 test 出现次数为:2
单词 the 出现次数为:1
单词 usage 出现次数为:1
*/

2.2 合并多个set

假设我们有多个set,需要将它们合并为一个大的set,我们可以使用set提供的insert方法,它会自动进行去重操作。

#include <iostream>
#include <set>

int main() {
    std::set<int> set1 = {1, 2, 3};
    std::set<int> set2 = {2, 3, 4};
    std::set<int> set3 = {3, 4, 5};
    std::set<int> set4;
    set4.insert(set1.begin(), set1.end());
    set4.insert(set2.begin(), set2.end());
    set4.insert(set3.begin(), set3.end());
    for(auto it = set4.begin(); it != set4.end(); it++) {
        std::cout << *it << " ";
    }
    //输出结果为:1 2 3 4 5
    return 0;
}

以上就是set的详细介绍,set的应用场景非常广泛,比如统计单词个数、合并多个set等等。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++ set到底是什么 - Python技术站

(0)
上一篇 2023年5月23日
下一篇 2023年5月23日

相关文章

  • 面向对象三大特性的意义讲解

    面向对象编程中的三大特性分别是封装、继承和多态,下面我将逐一进行讲解。 封装 封装是将数据和方法包装在一起,形成一个不可分割的整体,对外界进行隐藏。这样可以控制数据被外部直接访问的情况,从而保证数据的安全性和可靠性。比如在Java中,我们可以使用private关键字修饰一个属性或方法,来实现封装。示例代码如下: public class Person { p…

    C 2023年5月22日
    00
  • PHP实现基于图的深度优先遍历输出1,2,3…n的全排列功能

    实现基于图的深度优先遍历并输出1,2,3…n的全排列功能可以分为以下几个步骤: 构建无向图 为了实现深度优先遍历,我们需要先构建一个无向图。对于1,2,3…n,我们可以将它们看成节点,而对于任意两个节点i和j,如果它们代表的数字的差的绝对值等于1,那么i和j之间就可以连一条边。这样,我们就可以得到一个无向图,方便后续的遍历操作。 实现深度优先遍历 深…

    C 2023年5月22日
    00
  • 短视频脚本怎么写?短视频脚本写作技巧盘点

    短视频脚本怎么写?短视频脚本写作技巧盘点 什么是短视频脚本? 短视频脚本是指给短视频拍摄提供指导和约束的文本,包括了短视频中需要讲述的主要内容、场景、情节等。 短视频脚本写作技巧 1. 讲述一个故事 短视频不同于长视频,它需要在极短的时间内吸引观众的注意力,讲述一个吸引人的故事是非常重要的。编写短视频脚本时,需要在极短的时间内安排好完整的情节,让观众能够很快…

    C 2023年5月22日
    00
  • C语言求阶乘之和的三种实现方法(先阶乘再累加)

    当我们需要计算n的阶乘之和时,可以采用以下三种方法进行实现: 方法一:单层for循环 在本方法中,我们可以将for循环的条件直接设为i<=n即可,每次循环计算i的阶乘并加到sum中,最后输出sum即可。 示例代码: #include <stdio.h> int main() { int n, sum=0, factorial=1; prin…

    C 2023年5月23日
    00
  • C 文件读写

    下面是关于C文件读写的完整使用攻略。 一. 文件读写概述 文件读写是指对硬盘中的文件进行读取或写入的操作,主要使用文件指针、文件流、文件模式、文件大小、文件类型等概念和函数来实现。在C语言中,文件读写操作主要通过 头文件和相关的函数来实现。 二. 文件读写的基本操作 文件读写需要先打开文件,然后读写文件,最后关闭文件,这是基本的文件读写流程。 2.1 打开文…

    C 2023年5月10日
    00
  • C++ Qt属性系统详细介绍

    C++ Qt属性系统详细介绍 Qt属性系统是一种在Qt框架中用于管理数据的机制。它允许开发人员将属性与对象资源关联并对其进行访问和操作。在本文中,我将详细介绍Qt属性系统,包括属性系统的基础知识、如何使用属性系统,以及使用属性系统的一些示例。 基础知识 Qt属性系统的核心是属性。一个属性是一个值的抽象,该值存储在对象中。在Qt中,属性被定义为QObject类…

    C 2023年5月22日
    00
  • 新手入门常用代码集锦

    新手入门常用代码集锦 简介 对于前端新手来说,掌握常用的HTML、CSS和JavaScript代码是非常有必要的。本文从实战出发,收录了一些在实际开发中常用的代码,旨在帮助新手更快、更好地掌握前端开发技能。 HTML 常用标签 HTML中有一些标签是常用且必须掌握的,包括但不限于: <html>:定义文档的根元素 <head>:定义文…

    C 2023年5月23日
    00
  • C语言深入讲解函数参数的使用

    C语言深入讲解函数参数的使用 函数是C语言中的重要概念,它使得代码更加模块化和可复用。函数参数则是函数与函数之间数据传递的途径之一,它能够让我们灵活地使用函数。本文将会深入讲解C语言中函数参数的使用。 函数参数的传递方式 C语言中,函数参数的传递方式有两种:值传递和指针传递。 值传递 值传递即将函数调用时实参的值传递给形参,此时形参和实参是两个独立的变量,形…

    C 2023年5月23日
    00
合作推广
合作推广
分享本页
返回顶部