C++ STL中的自定义排序和vector
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了C++ STL中的自定义排序和vector,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2062字,纯文字阅读大概需要3分钟。
内容图文
优先队列priority_queue
优先队列一般写法
//队列头部值最大,大顶堆
priority_queue<int, vector<int>, greater<> >pq;
//小大顶堆
priority_queue<int, vector<int>, less<> >pq;
自定义排序规则
自定义()运算符,传入两个参数,内部写> 实际上是从小到大排序与sort相反!
写法一:
struct node
{
int to,cost;
};
struct cmp
{
bool operator() (const node &a,const node &b)
{
return a.cost > b.cost;
}
};
priority_queue<node,vector<node>,cmp>priq;
写法二:
struct node
{
int to,cost;
node(int x1,int x2)
{
to=x1;
cost = x2;
}
friend bool operator<(const node &a , const node &b)
{
return a.cost>b.cost; // ascending sort
}
};
priority_queue<node>priq;
优先队列的包装函数多,一般是empty(),size(),pop(),top(),push()
set和multiset
以下介绍set,multiset用法类似
一般写法
set<int>se
自定义排序
struct mynode {
int end, id;
};
struct rules
{
bool operator()(const mynode& a, const mynode& b)
{
return a.end < b.end;
}
};
set<mynode,rules> se;
set可以通过迭代器支持头部删除和尾部删除(也就是一种支持可以删除最值和动态更新的容器)
当然通过迭代器可以删除任意位置的元素
//一些用法
se.erase(mset.begin());//删除第一个
mset.erase(--mset.end());//删除最后一个
vec.push_back((*(--mset.end())).id);//取出最后一个元素的某个部分
set和multiset用处还是挺大的,常用的也是insert(),erase()(值或者地址),size(),empty()之类的
支持迭代器遍历。
vector
当然vector是数组,是向量,不能像上面那样维护动态的平衡树
这里介绍一下vector作为双端队列的使用,以及vector一些不常见的内置函数
// 任意位置插入一个元素
vector<int>::iterator it = vec.begin();
vec.insert(it, 2);
//任意位置插入 n 个相同元素
vec.insert(iterator it, int n, const T& x);
//插入另一个向量的 [forst,last] 间的数据
vec.insert(iterator it, iterator first, iterator last);
vec.resize(10)//会分配 10 个 0 给vec,相当于 push_back(0) 10 次。
push_back()//后面插入
pop_back()//弹出最后一个元素
back()//取出最后一个元素
vec.front();//取出第一个
vec.erase(iterator it);//任意位置删除一个元素
vec.erase(iterator first, iterator last);//删除 [first,last] 之间的元素
at 方法访问:vec.at(1); // 和下标访问区别就是 at 会检查是否越界,是则抛出 out of range 异常
vector容器也适用迭代器
内容总结
以上是互联网集市为您收集整理的C++ STL中的自定义排序和vector全部内容,希望文章能够帮你解决C++ STL中的自定义排序和vector所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。