关于STL容器的简单总结
1、结构体中重载运算符的示例
//结构体小于符号的重载
struct buf {
int a,b;
bool operator < (const buf& c1) const { //注意:第二个const一定不能少
return a<c1.a;
}
};
//或
struct foo {
int a,b;
};
bool operator < (const foo &x, const foo &y)
{return x.a < y.a;}
2、队列(queue)
#include <queue>
queue<int>a; //定义
a.push(x); //压入
a.pop(); //弹出
a.size(); //取大小
a.front(); //访问队首元素
a.back(); //访问队尾元素
a.empty(); //判断队列是否为空
3、优先队列(priority_queue)
#include <queue>
priority_queue<int,vector<int>,greater<int> > c; //定义从小到大的int类型的优先队列
priority_queue<int> c; //定义从大到小的int类型的优先队列
c.push(); //压入
c.pop(); //弹出队首元素
c.top(); //访问队首元素
c.empty(); //判断队列是否为空
//如是结构体必须重载'<'
4、双端队列(deque)
#include <deque>
deque <int> b; //定义双端队列
b.push_front(x); //在队首压入元素
b.push_back(x); //在队尾压入元素
b.pop_front(); //弹出队首元素
b.pop_back(); //弹出队尾元素
b.size(); //取大小
b.back(); //访问队尾元素
b.front(); //访问队首元素
b.empty(); //判断队列是否为空
//可用[]访问
5、栈(stack)
#include <stack>
stack<int> d; //定义
d.push(x); //压入元素
d.pop(); //弹出栈顶元素
d.top(); //访问栈顶元素
d.size(); //取大小
d.empty(); //判断栈是否为空
6、 集合(set)
#include <set>
set<int> e;
e.insert(i); //插入元素
e.erase(i); //删除值为i的元素
e.count(i); //查看值为i的元素是否存在
e.empty(); //判断set是否为空
set<int>:: iterator rit; //定义迭代器
rit = (e.insert(j)).first //返回插入后元素对应的迭代器
rit=e.find(i); //返回值为i的元素的迭代器,如果没找到返回的是e.end()
rit=e.lower_bound(i) //返回值大于等于i的第一个元素的迭代器, 如果没有大于等于i的元素返回e.end()
rit=e.upper_bound(i) //返回值大于i的第一个元素的迭代器, 如果没有大于i的元素返回e.end()
for(rit=e.begin();rit!=e.end();rit++) //正序遍历,值为*rit
set<int>::reverse_iterator rit; //反向遍历的迭代器
for(rit=e.rbegin();rit!=e.rend();rit++) //反向遍历必须这么写
注: 不能直接写e.erase(e.rbegin());
//如使用结构体,必须重载< 或写仿函数
7、可重集(multiset)
#include <set>
multiset<int> e;
e.insert(i); //插入元素
e.erase(i); //删除所有值为i的元素
e.erase(e.find(i)) //删除一个值为i的元素
e.count(i); //统计值为i的元素的数量
e.empty(); //判断multiset是否为空
multiset<int>:: iterator rit; //定义迭代器
rit = (e.insert(j)).first //返回插入后元素对应的迭代器
rit=e.find(i); //返回第一个值为i的元素的迭代器,