1.集合(set)
1.1 特点:集合中的元素不可以重复,因此集合可以自动去重,而且还会自动排序。另外一个特点是:集合的增删改查比普通数组快。它的时间复杂度为O(log(n))。
1.2 操作
1.3 示例
#include <bits/stdc++.h>
using namespace std;
int main()
{
set<int>s;
set<int>::iterator it;
s.insert(1);
s.insert(2);
s.insert(3);
s.insert(1);
cout<<"set的size值为:"<<s.size()<<endl;
cout<<"set的maxsize的值为:"<<s.max_size()<<endl;
cout<<"set中的第一个元素是:"<<*s.begin()<<endl;
cout<<"set中的最后一个元素是:"<<*s.end()<<endl;
it=s.find(2);
if(it!=s.end())
{
cout<<*it<<endl;
}
else
{
cout<<"not find it "<<endl;
}
s.clear();
if(s.empty())
{
cout<<"set为空!!!"<<endl;
}
cout<<"set的size值为:"<<s.size()<<endl;
cout<<"set的maxsize的值为:"<<s.max_size()<<endl;
return 0;
}
2.映射(map)
2.1 特点:指两个集合之间相互对应的关系,它弥补了普通数组的缺陷(下标只能是正整数)它的下标可以是任意类型。集合的第一个元素为关键字,第二个元素为值。关键字必须唯一,值不一定唯一。
2.2 操作
2.3 示例
#include <bits/stdc++.h>
using namespace std;
int main()
{
map<string, int>dict;
dict["Tom"]=1;
dict["Jone"]=2;
dict.insert(map<string, int>:: value_type("Mary",1));
if(dict.count("Mary"))
{
printf("Mary is in class %d\n",dict["Mary"]);
}
else
{
printf("Mary has no class ");
}
for(map<string,int>::iterator it=dict.begin(); it !=dict.end();++it)
{
cout<<it->first<<"is in class"<<it->second<<endl;
}
dict.clear();
return 0;
}
3.优先队列(priority_queue)
3.1 特点
3.1.1 大顶堆 :父亲>=孩子
3.1.2 小顶堆:父亲<孩子
3.1.3 优先队列的底层是由小顶堆或大顶堆来实现的。
3.1.4 优先队列的队首一定是最大值或最小值,插入一个数会自动排序,删除一个数也会自动排序。
3.2 操作
3.3 示例
#include <bits/stdc++.h>
using namespace std;
//priority_queue<int> q;//第一种定义方法,默认为大顶堆
priority_queue<int, vector<int>, less<int> > q;//第二种定义方法,大顶堆
//priority_queue<int, vector<int>, greater<int> > q;//第三种定义方法,小顶堆
int main()
{
q.push(6);
q.push(3);
q.push(5);
q.push(1);
q.push(2);
while(!q.empty())
{
cout<<q.top()<<endl;
q.pop();
}
return 0;
}