set 用法

++ Set常用用法

 86508人阅读 评论(1) 收藏 举报
 分类:
set集合容器:实现了红黑树的平衡二叉检索树的数据结构,插入元素时,它会自动调整二叉树的排列,把元素放到适当的位置,以保证每个子树根节点键值大于左子树所有节点的键值,小于右子树所有节点的键值;另外,还得保证根节点左子树的高度与右子树高度相等。
平衡二叉检索树使用中序遍历算法,检索效率高于vector、deque和list等容器,另外使用中序遍历可将键值按照从小到大遍历出来。
构造set集合主要目的是为了快速检索,不可直接去修改键值。

常用操作:
1.元素插入:insert()
2.中序遍历:类似vector遍历(用迭代器)
3.反向遍历:利用反向迭代器reverse_iterator。
    例:
    set<int> s;
    ......
    set<int>::reverse_iterator rit;
    for(rit=s.rbegin();rit!=s.rend();rit++)
4.元素删除:与插入一样,可以高效的删除,并自动调整使红黑树平衡。
            set<int> s;
            s.erase(2);        //删除键值为2的元素
            s.clear();
5.元素检索:find(),若找到,返回该键值迭代器的位置,否则,返回最后一个元素后面一个位置。
            set<int> s;
            set<int>::iterator it;
            it=s.find(5);    //查找键值为5的元素
            if(it!=s.end())    //找到
                cout<<*it<<endl;
            else            //未找到
                cout<<"未找到";
6.自定义比较函数
    (1)元素不是结构体:
        例:
        //自定义比较函数myComp,重载“()”操作符
        struct myComp
        {
            bool operator()(const your_type &a,const your_type &b)
            [
                return a.data-b.data>0;
            }
        }
        set<int,myComp>s;
        ......
        set<int,myComp>::iterator it;
    (2)如果元素是结构体,可以直接将比较函数写在结构体内。
        例:
        struct Info
        {
            string name;
            float score;
            //重载“<”操作符,自定义排序规则
            bool operator < (const Info &a) const
            {
                //按score从大到小排列
                return a.score<score;
            }
        }
        set<Info> s;
        ......
        set<Info>::iterator it;
c++ stl集合set介绍 c++ stl集合(Set)是一种包含已排序对象的关联容器。set/multiset会根据待定的排序准则,自动将元素排序。两者不同在于前者不允许元素重复,而后者允许。1) 不能直接改变元素值,因为那样会打乱原...

 

c++ stl集合set介绍

   c++ stl集合(Set)是一种包含已排序对象的关联容器。set/multiset会根据待定的排序准则,自动将元素排序。两者不同在于前者不允许元素重复,而后者允许。

1) 不能直接改变元素值,因为那样会打乱原本正确的顺序,要改变元素值必须先删除旧元素,则插入新元素

2) 不提供直接存取元素的任何操作函数,只能通过迭代器进行间接存取,而且从迭代器角度来看,元素值是常数

3) 元素比较动作只能用于型别相同的容器(即元素和排序准则必须相同)

set模板原型://Key为元素(键值)类型

template <class Key, class Compare=less<Key>, class Alloc=STL_DEFAULT_ALLOCATOR(Key) >

从原型可以看出,可以看出比较函数对象及内存分配器采用的是默认参数,因此如果未指定,它们将采用系统默认方式。


set的各成员函数列表如下:

c++ stl容器set成员函数:begin()--返回指向第一个元素的迭代器

c++ stl容器set成员函数:clear()--清除所有元素

c++ stl容器set成员函数:count()--返回某个值元素的个数

c++ stl容器set成员函数:empty()--如果集合为空,返回true

c++ stl容器set成员函数:end()--返回指向最后一个元素的迭代器

c++ stl容器set成员函数:equal_range()--返回集合中与给定值相等的上下限的两个迭代器

c++ stl容器set成员函数:erase()--删除集合中的元素

c++ stl容器set成员函数:find()--返回一个指向被查找到元素的迭代器

c++ stl容器set成员函数:get_allocator()--返回集合的分配器

c++ stl容器set成员函数:insert()--在集合中插入元素

c++ stl容器set成员函数:lower_bound()--返回指向大于(或等于)某值的第一个元素的迭代器

c++ stl容器set成员函数:key_comp()--返回一个用于元素间值比较的函数

c++ stl容器set成员函数:max_size()--返回集合能容纳的元素的最大限值

c++ stl容器set成员函数:rbegin()--返回指向集合中最后一个元素的反向迭代器

c++ stl容器set成员函数:rend()--返回指向集合中第一个元素的反向迭代器

c++ stl容器set成员函数:size()--集合中元素的数目

c++ stl容器set成员函数:swap()--交换两个集合变量

c++ stl容器set成员函数:upper_bound()--返回大于某个值元素的迭代器

c++ stl容器set成员函数:value_comp()--返回一个用于比较元素间的值的函数


c++ stl集合set插入,遍历用法举例

#include<iostream> 
#include<set> 
using namespace std; 
//set插入元素操作  
int main() 
{ //定义一个int型集合对象s,当前没有任何元素.由www.169it.com搜集整理set<int> s; s.insert(8);  //第一次插入8,可以插入  s.insert(1); s.insert(12); s.insert(6); s.insert(8);   //第二次插入8,重复元素,不会插入  set<int>::iterator it; //定义前向迭代器 //中序遍历集合中的所有元素  for(it=s.begin();it!=s.end();it++) cout<<*it<<endl;    system("pause"); return 0; 
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/509058.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C语言用递归求斐波那契数,让你发现递归的缺陷和效率瓶颈

C语言用递归求斐波那契数&#xff0c;让你发现递归的缺陷和效率瓶颈 分享到&#xff1a;QQ空间新浪微博腾讯微博豆瓣人人网递归是一种强有力的技巧&#xff0c;但和其他技巧一样&#xff0c;它也可能被误用。一般需要递归解决的问题有两个特点&#xff1a;存在限制条件&#xf…

C语言中文件的读取和写入

C语言中文件的读取和写入 注意&#xff1a; 1、由于C是缓冲写 所以要在关闭或刷新后才能看到文件内容 2、电脑处理文本型和二进制型的不同 &#xff08;因为电脑只认识二进制格式&#xff09; 在C语言中写文件 //获取文件指针 FILE *pFile fopen("1.txt", //打开文件…

mysql 常用操作

mysql 常用操作&#xff08;整理&#xff09; 标签&#xff1a; MYSQL常用操作 2013-07-22 16:37 10846人阅读 评论(0) 收藏 举报 本文章已收录于&#xff1a; 分类&#xff1a; MYSQL 版权声明&#xff1a;本文为博主原创文章&#xff0c;未经博主允许不得转载。 目录(?)[]…

deque

STL之deque容器详解Deque 容器 deque容器是C标准模版库(STL,Standard Template Library)中的部分内容。deque容器类与vector类似&#xff0c;支持随机访问和快速插入删除&#xff0c;它在容器中某一位置上的操作所花费的是线性时间。与vector不同的是&#xff0c;deque还支持从…

RMQ算法,求区间最值

poj 3264 Balanced Lineup 2016-07-27 11:15 49人阅读 评论(0) 收藏 举报分类&#xff1a;RMQ(Range MinimumMaximum Quer)&#xff08;4&#xff09; Balanced LineupTime Limit: 5000MS Memory Limit: 65536KTotal Submissions: 45854 Accepted: 21536Case Time Limit: 2000M…

【转载】向量空间模型VSM及余弦计算

向量空间模型VSM及余弦计算 向量空间模型的基本思想是把文档简化为以特征项&#xff08;关键词&#xff09;的权重为分量的N维向量表示。 这个模型假设词与词间不相关&#xff08;这个前提造成这个模型无法进行语义相关的判断&#xff0c;向量空间模型的缺点在于关键词之间的…

【美文保存】nosql数据库对比以及如何巧妙利用redis来提高效率?

1. MySqlMemcached架构的问题 实际MySQL是适合进行海量数据存储的&#xff0c;通过Memcached将热点数据加载到cache&#xff0c;加速访问&#xff0c;很多公司都曾经使用过这样的架构&#xff0c;但随着业务数据量的不断增加&#xff0c;和访问量的持续增长&#xff0c;我们遇…

嵌入式开发——DMA外设到内存

学习目标 加强理解DMA数据传输过程加强掌握DMA的初始化流程掌握DMA数据表查询理解源和目标的配置理解数据传输特点能够动态配置源数据学习内容 需求 uint8_t data; 串口接收(&data);data有数据了 实现串口的数据接收,要求采用dma的方式。 数据交互流程 CPU配置好DMA外…

系统设计类问题

如果让你设计一个秒杀系统&#xff0c;你会如何设计&#xff1f; Redis是一个分布式缓存系统&#xff0c;支持多种数据结构&#xff0c;我们可以利用Redis轻松实现一个强大的秒杀系统。 我们可以采用Redis 最简单的key-value数据结构&#xff0c;用一个原子类型的变量值(Atomic…

一种基于邻域的聚类算法

基本概念&#xff1a; 给定数据集D {d1&#xff0c;d2 ,.. &#xff0c;dn}&#xff0c;p和q是D中的两个任意对象。我们使用欧氏距离来评估p和q之间的距离&#xff0c;表示为 dist&#xff08;p&#xff0c;q&#xff09;。 我们将首先给出k-最近邻集合和反向的定义k-最近邻集…

博弈之威佐夫

博弈之威佐夫博弈详解 标签&#xff1a; 数学博弈游戏威佐夫algorithm2014-03-21 10:40 5330人阅读 评论(1) 收藏 举报分类&#xff1a;博弈&#xff08;6&#xff09; 版权声明&#xff1a;本文为博主原创文章&#xff0c;未经博主允许不得转载。 威佐夫博弈是博弈中的另一个经…

前缀树和后缀树

Trie树的应用: 除了本文引言处所述的问题能应用Trie树解决之外&#xff0c;Trie树还能解决下述问题&#xff08;节选自此文&#xff1a;海量数据处理面试题集锦与Bit-map详解&#xff09;&#xff1a; 3、有一个1G大小的一个文件&#xff0c;里面每一行是一个词&#xff0c;词的…

机器学习——决策树算法

机器学习——决策树算法原理及案例 标签&#xff1a; 机器学习决策树信息增益基尼指数模型评估 2016-05-04 15:31 43984人阅读 评论(1) 收藏 举报 分类&#xff1a; 机器学习&#xff08;10&#xff09; 版权声明&#xff1a;本文为博主原创文章&#xff0c;未经博主允许不…

机器学习——决策树的实现

#!/usr/bin/env python #-*-coding:utf-8-*- #决策树的建立&#xff0c;训练测试&#xff0c; from sklearn.feature_extraction import DictVectorizer import csv from sklearn import preprocessing from sklearn import tree from sklearn.externals.six import StringIO#读…

邻近算法(KNN算法)

邻近算法 锁定本词条由“科普中国”百科科学词条编写与应用工作项目 审核 。邻近算法&#xff0c;或者说K最近邻(kNN&#xff0c;k-NearestNeighbor)分类算法是数据挖掘分类技术中最简单的方法之一。所谓K最近邻&#xff0c;就是k个最近的邻居的意思&#xff0c;说的是每个样本…

KNN算法的实现

#!/usr/bin/env python #-*-coding:utf-8-*- #knn 的具体实现 import csv import random import math import operator #导入数据集 文件名&#xff0c;split区分那个集 def loadDataset(filename,split,trainintset[],testSet[]):with open(filename,rb) as csvfile:linescsv.…

支持向量机(SVM)算法

支持向量机&#xff08;SVM&#xff09;算法支持向量机(support vector machine)是一种分类算法&#xff0c;通过寻求结构化风险最小来提高学习机泛化能力&#xff0c;实现经验风险和置信范围的最小化&#xff0c;从而达到在统计样本量较少的情况下&#xff0c;亦能获得良好统计…

python文件操作以及相对路径和绝对路径问题

绝对路径&#xff1a; PROJECT_ROOT os.path.dirname(os.path.realpath(__file__))#获取项目根目录path os.path.join(PROJECT_ROOT,"data\\edge\\0_fuse.txt") #文件路径edgeMap np.loadtxt(path)相对路径&#xff1a; path "./data/edge/98_fuse.txt&quo…

神经网络NN算法

1. 背景: 1.1 以人脑中的神经网络为启发&#xff0c;历史上出现过很多不同版本1.2 最著名的算法是1980年的 backpropagation 2. 多层向前神经网络(Multilayer Feed-Forward Neural Network)2.1 Backpropagation被使用在多层向前神经网络上2.2 多层向前神经网络由以下部分组成&a…

神经网络算法实现

1. 关于非线性转化方程(non-linear transformation function) sigmoid函数(S 曲线)用来作为activation function:1.1 双曲函数(tanh)tanh是双曲函数中的一个&#xff0c;tanh()为双曲正切。在数学中&#xff0c;双曲正切“tanh”是由基本双曲函数双曲正弦和双曲余弦推导而来公式…