后缀数组实现原理的难度主要在后缀的排序上,在“后缀数组的应用”那篇文章中我们使用qsort实现后缀的排序,而qsort主要采用快速排序和基本排序算法相结合来实现排序。对于priority_queue其底层实现主要采用堆来实现,而且在后缀数组中实现cmp函数时是一个二级指针,不了解qsort的原理很难实现。那么这次我们就用priority_queue来取代qsort来实现。
#include<iostream>
#include<queue>
#include<stdlib.h>
#include<string.h>
#include<vector>
#include<stdio.h>
using namespace std;
#define string_len 100
char *prefix_ptr[string_len] = {0};
struct cmp1
{
bool operator()(char *string1, char *string2)
{
int value = strcmp(string1, string2) > 0;
return value;
}
};
int main()
{
char String[] = "fddgghyr";
priority_queue<char *, vector<char *>,cmp1> Queue1;
int len = strlen(String);
int i;
for(i = 0; i < len; i++)
{
prefix_ptr[i] = &String[i];
Queue1.push(prefix_ptr[i]);
}
for(i = 0; i < len; i++)
{
char * ptr = Queue1.top();
Queue1.pop();
cout<<ptr<<endl;
}
}
输出结果: