c++ - 我应该使用哪种 STL 来完成这项任务?

标签 c++ list stack queue

<分区>

我需要一个队列,它必须添加/删除我拥有的一些结构,例如:

struct MyObject
{
  int offset;
  BYTE status, data1, data2;
  double beatPos;

  enum Status
  {
    isOff = 8,
    isOn = 9,
  };
}   

当我 .Add() 一个元素时,由于 beatPos 值,这个队列必须将元素放在正确的位置,它必须从低位开始排序(队列顶部,即我将弹出的下一个元素)到上层(我将从中提取的最后一个元素)。

我看到有 std::priority_queue , 但我不确定是否可以选择哪个字段用于订购。

此外,一旦我在列表中添加了一些结构,我想删除第一个具有(例如)beatPos=1,567 的元素(它可能位于列表的中间,例如;不一定在开头)。

有什么线索吗?

最佳答案

你想要的是一个std::multiset .它采用比较模板参数,默认为 std::less 作为容器要存储的类型,但您可以指定不同的比较器。为此,我们可以创建一个 lambda 来比较两个 MyObject 并根据 beatPos 成员返回哪个对象应该具有更高的优先级

auto my_compare = [](const MyObject & lhs, const MyObject & rhs)
                    {
                        return lhs.beatPos < rhs.beatPos;
                    }

然后我们可以像这样使用它

std::multiset<MyObject, decltype(my_compare)> data(my_compare);

这将为您提供一个有序的容器,可以存储具有相同 beatPos 的多个对象,并允许您访问容器的中间部分。

关于c++ - 我应该使用哪种 STL 来完成这项任务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36744261/

相关文章:

c - 为什么 pthread 不使用给定的堆栈空间?

c++ - 如何创建用捕获的变量包装 lambda 的仿函数?

c++ - 如果我们在不同的机器上将 c++11 mt19937 作为相同的种子,我们会得到相同的随机数序列吗

Python:包含元组的排序列表

python:在字典中创建一个列表

c - (在 C 中)使用数组实现堆栈 - 将数组大小时加倍时出现运行时错误

c++ - 子进程 C++ 的 Windows 控制台信号处理

c++ - 指针在删除它并在 C++ 中再次分配新内存后是否获得相同的内存地址?

python - 如何根据元素在它们来自的列表中是否彼此相邻来拆分列表?

java - 用堆栈覆盖对象 (Java)