在C std :: Priority_queue中反向字母排序顺序的简单方法
Simple way to reverse alphabetical sort order in C++ std::priority_queue?
嗨,我正在求解某种排序算法问题。
我使用的是用STL队列标头的C STL Priority_queue用一个整数编号对字符串输入进行排序。
我知道有一个简单的想法可以用像这样的优先级进行整数排序的增量顺序。
#include <queue>
priority_queue<int> pq;
int arr[5] = {4,3,2,1,5};
for(int i = 0; i < 5; i++)
pq.push(-arr[i]);
while(!pq.empty()) {
cout << -pq.top() << endl;
pq.pop();
}
//the result may be 1, 2, 3, 4, 5
或我可以使用较少的操作员
来实现这样的实现priority_queue<int, vector<int>, less<int>> pq;
int arr[5] = {4,3,2,1,5};
for(int i = 0; i < 5; i++)
pq.push(arr[i]);
while(!pq.empty()) {
cout << pq.top() << endl;
pq.pop();
}
//the result may be 1, 2, 3, 4, 5
问题是我正在使用像这样的复杂数据架构
priority_queue<pair<int, pair<int, pair<int, string>>>> pq;
我知道我可以通过Priority_queue Operator Overloading解决此问题。
但是有没有任何简单而体面的方式可以实现反向字母顺序而无需实施操作员过载?
您绝对不要使用真实代码中的嵌套对使用这种复杂的数据结构。它使代码难以理解。什么是pq.top().second.second.first
?
如果您的结构很复杂,则定义具有这样的成员的结构(但具有有意义的成员名称):
struct datastructure
{
int member1;
int member2;
int member3;
std::string member4;
};
然后,您应该定义一个比较操作员。它实际上只是几行代码,它使您的代码更具可读性。如果您喜欢...
,它可以是嵌套的struct
struct datastructure_comp
{
bool operator()(const datastructure &lhs, const datastructure &rhs) const
{
return lhs.member1 < rhs.member2;
}
};
据我所知,如果您只想扭转复杂数据结构的顺序,则可以使用std::greater
而不是默认的std::less
(假设应以相反顺序比较所有字段,而不仅仅是第一个字段)。
好吧,如果您想为简单起见,那么您可以做类似的事情:
class datastructure
{
std::pair<int, std::pair<int, std::pair<int, string>>>> data;
public:
int GetValue1() const { return data.first; }
void SetValue1(int value) { data.first = value; }
// other access function here...
};
,然后定义比较将是微不足道的:
struct datastructure_comp
{
bool operator()(const datastructure &lhs, const datastructure &rhs) const
{
return lhs.data > rhs.data; // reversed sort...
}
};
相关文章:
- vim 标签导航,使用 VIM 或 CTAG 更改排序顺序
- 集成多态可扩展排序顺序
- 如何修改函数以按C++的排序顺序插入每个项目
- 按排序顺序将节点插入链表
- 在C std :: Priority_queue中反向字母排序顺序的简单方法
- std::map 的排序顺序取决于输入值
- 一种按排序顺序保持元素的数据结构,支持快速插入和计算连续元素之间的最大差异
- 将随机数插入排序顺序为C++的数组中
- C++链表-按排序顺序打印
- STL 按排序顺序存储数字
- 基于最大公分的排序顺序
- 用于插入大部分排序数据的数据结构,这些数据将保持排序顺序
- 将范围有限的浮点数转换为无符号的整数,以保持排序顺序和精度
- 在排序时更改排序顺序是否是未定义的行为
- 排序顺序问题
- QSqlQuery 忽略 SQLite DB 的排序顺序
- 按排序顺序迭代 std::vector
- 使用不同的比较保持相同的排序顺序
- 按排序顺序更新文件
- 如何按排序顺序生成数组的所有排列