set判重
set可以理解为一个不重复且有序的集合,实现原理红黑二叉树。
一般我们对与set的使用集中在以下几种操作:1.声明或创建set集合 2.插入操作 3.删除操作 4。判断集合中是否有元素 5.返回集合中元素的个数 6.遍历整个集合。
具体代码:
#include<bits/stdc++.h>
using namespace std;
int n,m;
//建立
set<int> intset;
set<string> stringset;
int main(){
string s1="测试1";
string s2="测试2";
string s3="测试3";
//插入
stringset.insert(s3);
stringset.insert(s1);
//返回集合中元素数量
cout<<"前两次插入完成后元素的数量:"<<stringset.size()<<endl;
stringset.insert(s2);
cout<<"前三次插入完成后元素的数量:"<<stringset.size()<<endl;
//遍历整个集合,借助迭代器实现
set<string>::iterator setstringiterator;
for(setstringiterator=stringset.begin();setstringiterator!=stringset.end();setstringiterator++){
cout<<*setstringiterator<<" ";
}
//删除
stringset.erase(s3);
cout<<"删除后元素个数为:"<<stringset.size()<<endl;
for(setstringiterator=stringset.begin();setstringiterator!=stringset.end();setstringiterator++){
cout<<*setstringiterator<<" ";
}
//判断是否有此元素
if(stringset.count(s2)!=0)cout<<"存在元素"<<s2<<endl;
return 0;
}
运行结果:
map判重
map头文件作用#include<map>
map是一个关联容器,第一个称为关键字(key)每个key只能在map中出现一次。第二个成为该关键字的值(value)。map是以模板的形式实现,可以存储任意类型的数据,map主要用于一对一映射的情况,内部所有的数据都是有序的。
可以把map理解为一个函数,key为自变量,value为因变量,两者一对一映射,通过key来寻找value。所有的元素都是两个值key(键值)value(实值)。
所有元素都会按键值进行排序,属于关联式容器,不允许插入重复的key值
一.构造与赋值
构造:map<int ,int > m;
赋值:m.insert(pair<int,int>(1,10));
具体代码:
#include<iostream>
#include<map>
using namespace std;
void printmap(map<int ,int>&m){
for(map<int,int>::iterator it=m.begin();it!=m.end();it++){
cout<<"key="<<it->first<<"value="<<it->second<<endl;
}
cout<<endl;
}
void test01(){
map<int ,int > m;//创建
m.insert(pair<int ,int >(1,10));//赋值语句,1起索引作用,10实值
m.insert(pair<int ,int >(3,23));
m.insert(pair<int ,int >(4,34));
m.insert(pair<int ,int >(2,22));
printmap(m);
}
int main(){
test01();
return 0;
}
二.大小与交换
size();//返回容器中元素的个数
empty();//判断是否为空
swap(st);//交换两个集合容器
代码实现:
void test02(){
map<int ,int > m1;//创建
m1.insert(pair<int ,int >(5,55));//赋值语句,1起索引作用,10实值
m1.insert(pair<int ,int >(6,66));
map<int ,int > m2;
m2.insert(pair<int ,int >(7,77));
m2.insert(pair<int ,int >(8,8));
if(m1.empty()){//判断是否为空
cout<<"m为空"<<endl;
} else{
cout<<"m不为空"<<endl;
cout<<"m的大小为:"<<m1.size()<<endl;
}
cout<<"交换前:"<<endl;
printmap(m1);
printmap(m2);
cout<<"交换后:"<<endl;
m1.swap(m2);//交换
printmap(m1);
printmap(m2);
}
运行结果:
三.插入和删除
insert(elem);//在容器中插入元素
clear();//清除所有元素
erase(pos);//删除pos迭代器所指的元素,返回下一个元素的迭代器
erase(beg,end);//删除区间元素,返回下一个元素的迭代器
erase(key);//删除值为key的元素
四种插入方式:
m.insert(pair<int ,int >(1,10));
m.insert(make_pair(3,23));
m.insert(map<int,int>::value_type(4,34));
m[4]=40;//不建议插入,但可以利用key访问value
代码实现:
void test01(){
map<int ,int > m;//创建
m.insert(pair<int ,int >(1,10));
m.insert(make_pair(2,23));
m.insert(map<int,int>::value_type(4,34));
m[3]=40;
printmap(m);
//删除
m.erase(3); //删除key为3的数
printmap(m);
m.erase(m.begin());//删除第一个数
printmap(m);
}
运行结果:
四.查找合统计
find(key);//查找key是否存在,若存在,返回改建的元素迭代器,所不存在,返回set.end();
count(key);//由于map不包含重复的key,因此返回值为1或者0,表示包含。
void test03(){
map<int ,int > m;//创建
m.insert(pair<int ,int >(1,10));
m.insert(make_pair(2,23));
m.insert(map<int,int>::value_type(4,34));
m[3]=40;
//查找
map<int,int>::iterator pos=m.find(3);
if(pos!=m.end()){
cout<<"找到了元素key="<<(*pos).first<<"value="<<pos->second<<endl;
} else{
cout<<"未找到"<<endl;
}
//统计
int num=m.count(3);
cout<<"num="<<num<<endl;
}