如何使用复数作为 map 中的键?这是一个无法编译的小例子:
#include <complex>
#include <map>
int main() {
std::complex<double> zero = 0.0;
std::map<std::complex<double>, int> theMap;
return (theMap.count(zero));
}
我可以毫无错误地创建 map ,但是任何方法(例如,上面的 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>
没有散列)
最佳答案
我没有看过实现,但是根据 cppreference std::map
使用 std::less<T>
作为比较运算符,它可能不专门用于 std::complex
,如果你实现一个,将它作为模板中的第三个参数传递 std::map<std::complex, int, LessOperator>
与 std:unordered_map
类似,您可以在其中提供哈希仿函数和相等仿函数。如果这两个都实现了,你可以使用 std::complex
作为关键。
关于c++ - 使用 std::complex<double> 作为 std::map 键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26245189/