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

标签 c++ std priority-queue unordered-map

我正在尝试使用标准库优先级队列来对自定义类 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;

但是看起来我不允许引用封闭函数的局部变量。

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

最佳答案

您可以将对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);

关于c++ - 在 C++ 中的重载运算符中使用局部变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47745272/

相关文章:

c++ - 我可以使用什么容器来编写二进制文件?

c++ - 使用 std::streams 格式化输出

c++ - std::map 中的项目是否永远保持在同一个地址?

Java PriorityQueue自定义比较器

scala - 在我的算法中替换命令式 PriorityQueue

c++ - std::priority_queue 中 std::greater 的行为是什么?

c++ - C/C++ 中的衍生物?

带有变量和类型的 C++03 宏定义?

c++ - 不同的行为取决于优化选项

在 std::array 中使用默认参数调用 C++ 函数?