在 C++11 中查找和访问优先级队列中的元素

Find and access the element in a Priority Queue in C++11

如何在C++11的优先级队列中找到一个元素并访问相应的元素?至于下面的例子:最好检查优先级队列 Q 中的元素是否存在并访问它。是否也可以编辑它?

意图:编写一个应用程序,其中我必须检查特定对象是否已插入优先级队列。如果它被插入,那么我需要访问那个特定的对象并可能更新它。

#include <iostream>
#include <vector>
#include <string>
#include <queue>

struct Person {
    int val;
    std::string y;
    bool operator()(const Person& lhs, const Person& rhs) const
  {
    return lhs.val > rhs.val;
  }
    };

int main () {

    std::vector<int> data = {5,4,3,2,1};
    Person X1,X2,X3,X4,X5;
    X1.val = 20;
    X1.y = "twenty";

    X2.val = 10;
    X2.y = "ten";

    X3.val = 50;
    X3.y = "fifty";

    X4.val = 5;
    X4.y = "five";

    X5.val = 0;
    X5.y = "zero";

    std::vector<Person> V; 
    V.push_back(X1);
    V.push_back(X2);
    V.push_back(X3);
    V.push_back(X4);
    V.push_back(X5);

    std::priority_queue<Person,std::vector<Person>,Person> Q; 

    for (auto x: V) Q.push(x);
    return 0;
}

对于这种用法,我建议您结合使用 std::priority_queuestd::unordered_map

让我们按如下方式重组您的数据:

struct PersonInfo {
    std::string y;
};

这包含一个人的可变信息。

现在你有两个容器:

  • std::priority_queue<int> 个值,这些值以前是 Person class 对象中的 val

  • 一个 std::unordered_map<int, PersonInfo> 将这些值映射到 PersonInfos.

为了您陈述的意图

in which I have to check whether a particular object has been inserted into priority queue or not.

简单地检查是否使用地图插入了东西;不过,请确保在推送和弹出优先级队列时更新它。

If it is being inserted, then I need to access that particular object and possibly update it.

就用无序映射。