小编Bre*_*ond的帖子

使用std :: complex <double>作为std :: map键

如何在地图中使用复数作为键?这是一个不会编译的小示例:

#include <complex>
#include <map>
int main() {
  std::complex<double> zero = 0.0;
  std::map<std::complex<double>, int> theMap;
  return (theMap.count(zero));
}
Run Code Online (Sandbox Code Playgroud)

我可以创建没有错误的地图,但是任何方法(例如,count上面的调用以及find[]运算符insert等)都会生成编译时错误。就我的理解而言,这绝对是一个问题,因为使用clang和g ++可以获得类似的结果。

看起来编译器无法比较两个复数。我创建了所有比较运算符(例如bool operator< (const std::complex & lhs, const std::complex & rhs) {return (std::norm(lhs) < std::norm(rhs));}),用于比较复数(只要您不介意3 < -5为,这对即可map),但编译器不会选择它。

我对unordered_map也有类似的问题(没有哈希值complex<double>

c++ stdmap c++11

5
推荐指数
1
解决办法
832
查看次数

标签 统计

c++ ×1

c++11 ×1

stdmap ×1