·对于上述的rank的条件部分可以使用规定优先队列的优先级来指定
bool operator < (const Node& a) const
{
if(l>a.l)
{
return 1;
}
else if(la.t)
{
return 1;
}
else if(ta.w)
{
return 1;
}
else if(wa.c)
{
return 1;
}
else if(ca.f)
{
return 1;
}
else if(f
·其中又需要访问rank的元素,使用vector来实现
vector vtor;
for(int k=0;k
·总实现代码如下
#include
using namespace std;
#include
#include
struct Node
{
long long u; //端点
long long v;//端点
long long l;//长度
long long t;//时间
long long w;//修路费用
long long c;//车流最大容量
long long f;//当前车流量
Node(long long uu=0,long long vv=0,long long ll=0,long long tt=0,long long ww=0,long long cc=0,long long ff=0)
{
u=uu;
v=vv;
l=ll;
t=tt;
w=ww;
c=cc;
f=ff;
}
bool operator < (const Node& a) const
{
if(l>a.l)
{
return 1;
}
else if(la.t)
{
return 1;
}
else if(ta.w)
{
return 1;
}
else if(wa.c)
{
return 1;
}
else if(ca.f)
{
return 1;
}
else if(f pq;
priority_queue temp;
for(int i=0;i vtor;
for(int k=0;k
Vector是同一种类型的对象的集合,每个对象都有一个对应的整数索引值。Vector的数据安排及操作方式与array非常相似,唯一的差别在于array是静态空间,一旦配置了就不能改变;vector是动态空间,随着元素的加入,它的内部机制会自行扩充空间以容纳新元素。
使用vector之前,必须包含相应的头文件和命名空间:
#include
using std::vector
vector不是一种数据类型,而只是一个类模版,可以用来定义多种数据类型。在定义了vector对象之后,vector类型的每一种都指定了其保存元素的类型。例如:使用的vector和vector都是数据类型。
vector vec1; // v1保存类型为type的对象,默认构造函数,v1为空
vector vec2(size); // v2含有值初始化的元素的size个副本
vector vec3(size,value); // v3包含值为value的size个元素
vector vec4(myvector); // v4是myvector的一个副本
vector vec5(first,last); // 用迭代器first和last之间的元素创建v5
vector赋值不可像数组一样使用花括号显示初始化,但可借用数组来初始化。
int array[ ]={1, 2, 3, 4, 5, 6, 7};
vector<int> vec(array, array+7); // 相当于使用begin end 此时vec中的元素也是1234567
v.empty():如果v为空,则返回true,否则返回false。
v.size():返回v中元素的个数。
v.push_back(t):在v的末尾增加一个值为t的元素。
v[n]:返回v中位置为n的元素。
v1=v2:把v1的元素替换成v2中元素的副本。
v1==v2:如果v1与v2相等,则返回true。
!=, <, <=, >, >=:保持这些操作符惯有的含义。
Vector的下标操作符接受一个值,并返回vector中的该对应位置的元素。Vector元素的位置从0开始,使用vector::size_type作为下标的类型。下标操作不能添加元素,只能获取已存在的元素,想在vector中插入元素,使用push_back()函数。也就是说,必须是已存在的元素才能用下标操作符进行索引,通过下标操作符进行赋值时,不会添加任何元素。下标操作符[ ]仅能提取确实已存在的元素。
因为容器受容器元素类型的约束,所以可定义元素是容器类型的容器。例如,可以定义 vector 类型的容器 lines,其元素为 string 类型的 vector 对象:
vector< vector<string> > lines;
// 这里需要特别说明的是C++11中已经不在使用两个空格隔开相邻的>符号
声明容器的容器,必须用空格隔开两个相邻的 > 符号,以示这是两个分开的符号,否则,系统会认为 >> 是单个符号,为右移操作符,并导致编译时错误。
vector<vector<int> > mat(3, vector<int>(4));
mat含有3个元素,每个元素是含有4个int值的向量,mat.size()是3 ,即3行。这个用法即相当于一个2维数组。
这里我们以vector
为例进行说明。