如何在地图中使用复数作为键?这是一个不会编译的小示例:
#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>)