1. set(集合)
1.1 特点:集合中的元素不可以重复,因此集合中的元素可以自动去重。集合的增删改查比普通数组快。其时间复杂度是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 特点:map就是指两个集合之间的元素相对应的关系。它弥补了普通数组的缺陷(下标只能是0的正整数),它的下标可以是任意类型。集合的第一个元素为关键字(key word),集合的第二个元素为值(value),关键字必须唯一,值不一定唯一。
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");
}
map<string,int>::iterator it;
for(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(2);
q.push(5);
q.push(1);
q.push(2);
while(!q.empty())
{
cout<<q.top()<<endl;
q.pop();
}
return 0;
}