C++ STL set:erase()、clear()、find()、insert()方法

这篇具有很好参考价值的文章主要介绍了C++ STL set:erase()、clear()、find()、insert()方法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、erase() 方法

        如图所示:

#include <iostream>
#include <set>
#include <string>
using namespace std;
int main()
{
    //创建并初始化 set 容器
    set<int>myset{1,2,3,4,5};
    cout << "myset size = " << myset.size() << endl;

    //1) 调用第一种格式的 erase() 方法, 其返回值为一个整数,表示成功删除的元素个数
    int num = myset.erase(2); //删除元素 2,myset={1,3,4,5}
    cout << "1、myset size = " << myset.size() << endl;
    cout << "num = " << num << endl;

    //2) 调用第二种格式的 erase() 方法, 返回值是迭代器,其指向的是 set 容器中删除元素之后的第一个元素
    set<int>::iterator iter = myset.erase(myset.begin()); //删除元素 1,myset={3,4,5}
    cout << "2、myset size = " << myset.size() << endl;
    cout << "iter->" << *iter << endl;

    //3) 调用第三种格式的 erase() 方法, 返回值是迭代器,其指向的是 set 容器中删除元素之后的第一个元素
    set<int>::iterator iter2 = myset.erase(myset.begin(), --myset.end());//删除元素 3,4,myset={5}
    cout << "3、myset size = " << myset.size() << endl;
    cout << "iter2->" << *iter2 << endl;
    return 0;
}

        执行结果为:

c++ set.erase,c++,算法,开发语言

二、clear()方法

        该方法不需要传入任何参数,也没有任何返回值。

#include <iostream>
#include <set>
#include <string>
using namespace std;
int main()
{
    //创建并初始化 set 容器
    std::set<int>myset{1,2,3,4,5};
    cout << "1、myset size = " << myset.size() << endl;
    //清空 myset 容器
    myset.clear();
    cout << "2、myset size = " << myset.size() << endl;
    return 0;
}

        执行结果为:

c++ set.erase,c++,算法,开发语言

三、find()方法

参数:该函数接受一个强制性参数element ,该元素指定要在集合容器中搜索的元素。

返回值:该函数返回一个迭代器,该迭代器指向在集合容器中搜索的元素。如果找不到该元素,则迭代器将指向集合中最后一个元素之后的位置。

// CPP program to demonstrate the
// set::find() function
#include <bits/stdc++.h>
using namespace std;
int main()
{

    // Initialize set
    set<int> s;

    s.insert(1);
    s.insert(4);
    s.insert(2);
    s.insert(5);
    s.insert(3);
    for (auto j = s.begin(); j != s.end(); j++) {
        cout << *j<<"\t";
    }
    cout<<endl;
    auto pos = s.find(3);
    // prints the set elements
    cout << "The set elements after 3 are: ";
    for (auto it = pos; it != s.end(); it++)
        cout << *it << " ";

    return 0;
}

c++ set.erase,c++,算法,开发语言

         这些都是查找成功的情况,返回对应元素位置的迭代器,那如果找不到呢?经过验证得出:找不到返回it.end(),也即集合中最后一个元素之后的位置。但我试了发现一个很奇怪的事:找不到时返回的迭代器对应的元素居然不是0,而是5(集合中最后一个元素)!如图所示:

#include <bits/stdc++.h>
using namespace std;
int main()
{

    // Initialize set
    set<int> s;

    s.insert(1);
    s.insert(4);
    s.insert(2);
    s.insert(5);
    s.insert(3);
    for (auto j = s.begin(); j != s.end(); j++) {
        cout << *j<<"\t";
    }
    cout<<endl;

    cout<<"找不存在的0:";
    auto pos = s.find(0);
    cout<<*pos<<"\t";
    cout<<(pos==s.end())<<endl;

    cout<<"找存在的5:";
    auto pos2 = s.find(5);
    cout<<*pos2<<"\t";
    cout<<(pos2==s.end())<<endl;

    cout<<"找不存在的6:";
    auto pos3 = s.find(6);
    cout<<*pos3<<"\t";
    cout<<(pos3==s.end())<<endl;

    cout<<"找不存在的7:";
    auto pos4 = s.find(7);
    cout<<*pos4<<"\t";
    cout<<(pos4==s.end())<<endl;

    cout<<"*s.begin():"<<*s.begin()<<endl;
    cout<<"*s.end():"<<*s.end()<<endl;
    return 0;
}

c++ set.erase,c++,算法,开发语言

        可见s.end()虽然指向不存在的位置,但这个位置的数据并不是0,而是非空集合当中的最后一个元素!

        所以判断是否成功找到的条件应该为if(pos!=s.end())而不是if(*pos!=0):

	set<int> test;
	if(test.find(x)!=test.end());	//之前忘记加()
	{
	···
	}

四、insert()方法

#include <bits/stdc++.h> 
using namespace std; 
int main() 
{ 
  
    set<int> s; 
  
    // Function to insert elements 
    // in the set container 
    s.insert(1); 
    s.insert(4); 
    s.insert(2); 
    s.insert(5); 
    s.insert(3); 
  
    cout << "The elements in set are: "; 
    for (auto it = s.begin(); it != s.end(); it++) 
        cout << *it << " "; 
  
    return 0; 
}

c++ set.erase,c++,算法,开发语言

 文章来源地址https://www.toymoban.com/news/detail-718361.html

到了这里,关于C++ STL set:erase()、clear()、find()、insert()方法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C++ STL set容器使用教程

    set 为关联式容器,翻译为 集合 ,其中的元素类型为 pair ,需要注意 set 容器存储的各个键值对,要求键 key 和值 value 必须相等 基于 set 容器的这种特性,当使用 set 容器存储键值对时,只需要为其提供各键值对中的 value 值(也就是 key 的值)即可。 set 容器 会自行根据键的大

    2024年02月10日
    浏览(37)
  • 【C++】STL之map、set类源码剖析

    目录 概述 算法 源码 Iterator.h RBTree.h Map.h Set.h test.cpp map和set都是STL中的关联式容器,而vector、list、deque是序列式容器。 map是映像,set是集合,map元素的数据类型是std::pairK,V格式(key/value形成映像),set元素的数据类型只有key值。 map和set的实现是对红黑树的封装,map根据key值进行

    2024年02月02日
    浏览(39)
  • 【C++ STL之map,set,pair详解】

    在C++的STL(Standard Template Library)中,map是一个非常有用的关联容器。它提供了一种键-值对的数据结构,其中的元素按照键的顺序进行排序,并且每个键是唯一的。本文将详细介绍C++ STL中map的使用方法和一些常见操作。 (1)头文件 (2)初始化方法 可以使用以下方式声明和

    2024年02月12日
    浏览(36)
  • 【C++】STL 算法 ⑦ ( 二元谓词使用场景 - 大小写不敏感 set 集合 | tolower 函数 - 将字符转为小写字母 | 基于 tolower 实现大小写不敏感的比较函数对象 )

    本篇博客中 , 实现一个 set 集合 , 存放 英文字母 组成的字符串 , 且 大小写不敏感 ; 实现的方法 : 自定义字符串 对比排序规则 , 先 将 字符串 都转为小写字母 , 然后进行对比 ; tolower 函数是 C / C++ 标准库 中的函数 , 其作用是 将 字符从 大写形式 转换为 小写形式 , 该函数定义

    2024年02月02日
    浏览(65)
  • 【C++】STL——set/multiset 和 map/multimap的使用

    在初阶阶段,我们已经接触过STL中的部分容器 比如:vector、list、deque、forward_list(C++11)等,这些容器统称为 序列式容器 ,因为其底层为线性序列的数据结构,里面存储的是元素本身。 而今天我们要学习的几个容器称为关联式容器,那什么是关联式容器?它与序列式容器有什

    2024年02月14日
    浏览(43)
  • C++高级编程——STL:list容器、set容器和map容器

    本专栏记录C++学习过程包括C++基础以及数据结构和算法,其中第一部分计划时间一个月,主要跟着黑马视频教程,学习路线如下, 不定时更新,欢迎关注 。 当前章节处于: ---------第1阶段-C++基础入门 ---------第2阶段实战-通讯录管理系统, ---------第3阶段-C++核心编程, -----

    2024年01月25日
    浏览(45)
  • 【C++】 使用红黑树模拟实现STL中的map与set

    前面的文章我们学习了红黑树,也提到了C++STL中的map和set的底层其实就是用的红黑树来实现的(而map和set的使用我们前面也学过了)。 既然红黑树我们也学习过了,那这篇文章我们就用红黑树来简单实现一下STL中的map和set,重点是学习它的框架。 上一篇文章我们实现了红黑

    2024年02月12日
    浏览(30)
  • 【C++入门到精通】哈希 (STL) _ unordered_map _ unordered_set [ C++入门 ]

    欢迎各位大佬们的关顾,本文将介绍unordered系列容器以及其中的两个重要成员: unordered_map 和 unordered_set 。unordered_map是一种无序的关联容器,它使用哈希表来存储键值对,并提供高效的插入、查找和删除操作。在本文中,我们将首先介绍unordered_map的基本概念和特点,然后详

    2024年02月08日
    浏览(42)
  • 【C++】STL——用一颗红黑树封装出map和set

    我们都知道set是K模型的容器,而map是KV模型的容器,但是它俩的底层都是用红黑树实现的,上篇博文中我们模拟实现了一颗红黑树,接下来将对其进行改造,继而用一颗红黑树封装出map和set。 本质上map和set其内部的主要功能都是套用了红黑树现成的接口,只是稍作改动即可

    2023年04月15日
    浏览(34)
  • 【C++练级之路】【Lv.17】【STL】set类和map类的模拟实现

    快乐的流畅:个人主页 个人专栏:《C语言》《数据结构世界》《进击的C++》 远方有一堆篝火,在为久候之人燃烧! STL库中的set类和map类,其底层原理都是 通过红黑树来实现 的。尽管set和map可以各自实现一棵红黑树,但是为了提高代码的复用率,STL库中将红黑树进行了一定

    2024年04月16日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包