在 C++ 中的重载运算符中使用局部变量

Ali*_*401 2 c++ unordered-map std priority-queue

我正在尝试使用标准库优先级队列来对自定义类的对象进行排序Foo。但是,比较元素取决于它们在 unordered_map 中映射到的值map

我正在尝试构建这样的东西:

std::unordered_map<Foo,double> map;
struct Compare {
   bool operator()(const Foo& a, const Foo& b) {
      return map[a]<map[b];
   }
}
std::priority_queue<Foo,std::vector<Foo>,Compare> queue;
Run Code Online (Sandbox Code Playgroud)

然而,看起来我不允许引用封闭函数的局部变量。

实现这一目标的标准方法是什么?

eer*_*ika 5

您可以将引用存储为map的成员变量Compare

您可以通过使用 lambda 而不是命名函数对象来摆脱一些样板:

auto compare = [&map](const auto& a, const auto& b) {
    return map[a]<map[b];
};
std::priority_queue<Foo,std::vector<Foo>,decltype(compare)> queue(compare);
Run Code Online (Sandbox Code Playgroud)