在 C++ 的重载运算符中使用局部变量
Using a local variable in an overloaded operator in c++
我正在尝试使用标准库优先级队列来排序自定义 class 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);
我正在尝试使用标准库优先级队列来排序自定义 class 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);