如何在C++ STL的queue当中查找一个元素?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在C++ STL的queue当中查找一个元素?相关的知识,希望对你有一定的参考价值。
声明为queue<int> q;待查找元素声明为int num;
int i;queue里面没有find,所以自己写一个吧,比如可以用下面这种,一个一个查,把查到的值记录下来。 for(i =0; i < q.size(); i ++) if(num == q[i]) break;if(i == q.size())cout << "num doesn't exist;"<<endl;elsecout << "num is the "<<i+1<<"th element in queue q!"<<endl; 参考技术A如果num的范围已知,且空间足够,那么:
bool flg[size] = false;
每次元素进队时多一步操作:(i为即将入队的值)
q.push(i);
flg[i] = true;
查找的时候只需要参考flg[num]就好。
这样查找比较快,时间复杂度为O(1)。
如果空间不够,或者想知道num在队中的位置,那么把整个队列遍历一遍。
queue<int>tmp; int i=1;
while(!q.empty())
tmp.push(q.front());
q.pop();
if(tmp.rear==num) cout<<i<<endl;
i++;
while(!tmp.empty())
q.push(tmp.front());
tmp.pop();
这样,所有值为num的元素所在的位置都可以知道了。
由于队列是动态的,所占用的空间只会多一点点。但时间复杂度为O(n)。
参考技术B #include<stdio.h>#include<iostream>
#include<string>
#include<malloc.h>
#include<fstream>
#include<vector>
#include<queue>
using namespace std;
void searchQueue(queue<int> q, int searchValue)
int pos = 0;
bool searchFlag = false;
for(int i=0; i<q.size(); ++i)
if(q.front() == searchValue && !searchFlag)
cout << pos;
searchFlag = true;
else
q.push(q.front());
q.pop();
pos++;
int main()
queue<int> q;
q.push(1);
q.push(2);
q.push(3);
searchQueue(q, 2);
参考技术C queue是队列的意思,好像有一个front方法,可以看看 参考技术D //使用algorithm的find函数
#include <algorithm>
#include <queue>
using namespace std;
int main()
queue<int> q=1,2,3,4,5,6,7; //初始化
int num=2; //赋值
auto pos=find(q.cbegin(),q,cend(),num);
if(pos!=q.cend())
cout<<"找到该元素"<<endl;
else
cout<<"未找到该元素"<<endl;
c++ STL queue:deque+优先队列
/* queue 模板类需要两个模板参数,一个是元素类型,一个容器类型,元素类型是必要的,
容器类型是可选的,默认为deque队列 类型。
一:定义queue(要有头文件#include <queue>)
queue<int> q1;queue<double> q2;
二:基本函数
back()返回一个引用,指向队列的最后一个元素。
empty()函数返回真(true)如果队列为空,否则返回假(false)。
front()返回队列第一个元素的引用。
pop()函数删除队列的一个元素
push() 在末尾加入一个元素
size() 返回队列中元素的个数
容器类型是可选的,默认为deque队列 类型。
一:定义queue(要有头文件#include <queue>)
queue<int> q1;queue<double> q2;
二:基本函数
back()返回一个引用,指向队列的最后一个元素。
empty()函数返回真(true)如果队列为空,否则返回假(false)。
front()返回队列第一个元素的引用。
pop()函数删除队列的一个元素
push() 在末尾加入一个元素
size() 返回队列中元素的个数
三:示例代码
#include<bits/stdc++.h>
using namespace std;
int main()
int e,n,m;
queue<int> q1;
for(int i=0;i<10;i++)
q1.push(i);
if(!q1.empty())
cout<<"dui lie bu kongn";
n=q1.size();
cout<<n<<endl;
m=q1.back();
cout<<m<<endl;
for(int j=0;j<n;j++)
e=q1.front();
cout<<e<<" ";
q1.pop();
cout<<endl;
if(q1.empty())
cout<<"dui lie bu kongn";
system("PAUSE");
return 0;
#include<bits/stdc++.h>
using namespace std;
int main()
int e,n,m;
queue<int> q1;
for(int i=0;i<10;i++)
q1.push(i);
if(!q1.empty())
cout<<"dui lie bu kongn";
n=q1.size();
cout<<n<<endl;
m=q1.back();
cout<<m<<endl;
for(int j=0;j<n;j++)
e=q1.front();
cout<<e<<" ";
q1.pop();
cout<<endl;
if(q1.empty())
cout<<"dui lie bu kongn";
system("PAUSE");
return 0;
优先队列
优先队列容器与队列一样,只能从队尾插入元素,从队首删除元素。
但是它有一个特性,就是队列中最大的元素总是位于队首,
所以出队时,并非按照先进先出的原则进行,而是将当前队列中最大的元素出队。
这点类似于给队列里的元素进行了由大到小的顺序排序。
元素的比较规则默认按元素值由大到小排序,可以重载“<”操作符来重新定义比较规则。
定义类型:与普通队列一样
基本操作:
empty() 如果队列为空,则返回真
pop() 删除对顶元素,删除第一个元素
push() 加入一个元素
size() 返回优先队列中拥有的元素个数
top() 返回优先队列对顶元素,返回优先队列中有最高优先级的元素
以上是关于如何在C++ STL的queue当中查找一个元素?的主要内容,如果未能解决你的问题,请参考以下文章