우선 순위 대기열 priorityqueue

1787 단어
오늘 코드를 이식할 때 priority 를 봤어요.queue의 정의는 처음에 일반 대열로 보았는데 뒤에 잘못된 것을 발견했다. 왜 3개의 파라미터가 있는지 모르겠다. 그래서 찾아보니 이것이 우선순위 대열이라는 것을 알았다. 아하, 또 새로운 것을 배웠다. 요 며칠 동안 코드를 이식했는데 새로운 지식을 배우지 못했기 때문에 오늘은 시간을 들여 공부했다.마침 내가 프로그램 최적화를 해서 쓸 수 있는 게 있어.
priority_queue는 (우선 대기열) 봉인된 무더기 구조입니다.

1. 정의


priority_queue
Type은 데이터 유형이고 Container는 데이터를 저장하는 컨테이너이며 Functional은 요소 비교 방식입니다.
두 개의 인자를 쓰지 않으면 용기는 기본적으로vector를 사용하고, 비교 방식은 기본적으로operator를 사용합니다
이곳은 당연히 스스로 포장operator를 정의할 수 있다
class cmd

{
    bool operator()(const int a,const int b)
    {
        return a>=b;
    }
}

priority_queue,cmd> m_que;

2. 요소push() 삽입

for(int i = 0;i<10;i++)
{
    m_que.push(i);
}

3. 원소top()를 꺼내고 원소pop() 삭제

while(!m_que.empty())
{
    int i = m_que.top();
    m_que.pop();
}

4. 요소 크기 크기 크기 가져오기()

m_que.size();

인스턴스

#include 
#include 
#include 

using namespace std;

struct  node
{
	int a;
	int b;
	int c;
};

struct cmd
{
	bool operator()(const node a, const node b)
	{
		if (a.a > b.a)
			return true;
		else if (a.a == b.a)
		{
			if (a.b > b.b)
			{
				return true;//   
			}
			else
			{
				return false;
			}
		}
		else
			return false;
	}
};
int main()
{
	priority_queue,cmd> m_que;

	struct node n1 = { 2, 2, 3 }, n2 = { 1, 3, 4 }, n3 = { 2, 1, 5 };
	m_que.push(n1);
	m_que.push(n2);
	m_que.push(n3);

	while (!m_que.empty())
	{
		cout << m_que.top().a << "------" << m_que.top().b << endl;
		m_que.pop();
	}
	return 0;
}

출력:
1----3
2----1
2-----2

좋은 웹페이지 즐겨찾기