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

Posted

技术标签:

【中文标题】在 C++ 中的重载运算符中使用局部变量【英文标题】:Using a local variable in an overloaded operator in c++ 【发布时间】:2017-12-11 01:19:32 【问题描述】:

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

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

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

【问题讨论】:

【参考方案1】:

您可以将对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++:使用类|| 运算符重载友元

C++ 运算符重载三(链式编程)

C++重载赋值运算符

C++重载赋值运算符

重载运算符+ C++

什么是C++重载?