c++ - 对 vector C++ 中的复数进行排序

标签 c++ sorting vector complex-numbers

我是 C++ 和编程的新手,我正在尝试获取用户在不同行中输入的复数,直到用户点击 ctr-d。我的逻辑在正确的轨道上吗?我知道我有很多错误。提前致谢

main(){
  vector <complex<double> > vector;
  double cmplx;
  while (!cin.eof()){
    cout << "Enter a complex number or ctr-d to stop" << endl;
    cin >> cmplx;
    vector.push_back(cmplx);
  }
  sort(vector.begin(),vector.end());
  for (int x = 0; x < vector.size(); x++)
    cout << vector[x] << endl;
}

最佳答案

从数学上讲,没有为复数定义的顺序,这就是为什么没有 operator< 的原因为 complex 定义.您可以尝试发明自己的排序函数(例如按字典顺序排序),但这需要编写您自己的比较器函数:

template <class T>
bool complex_comparator(const complex<T> &lhs, const complex<T> &rhs) {
 return real(a) == real(b) ? imag(a) < imag(b) : real(a) < real(b);
}

然后像这样调用排序:

sort(v.begin(), v.end(), complex_comparator<double>);

但是,我不太确定您要实现的目标是什么,因为说一个复数比另一个复数“大”是没有意义的。

关于c++ - 对 vector C++ 中的复数进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28182887/

相关文章:

c++ - 无法打开源文件 "swap.h"

c++ - ROOT条件分支选择

c++ - BSTR 中是否有 Unicode 符号?

java - JVM 中这些时序问题的原因是什么?

java - 如何使用两种排序方式对 ArrayList 进行排序

c++ - 创建引用 vector 的优雅方式

c++ - 数组到数组——在 C++ 中将 'int*' 分配给 'int 错误时的类型不兼容

javascript - 查找数组中最大重复数的总和javascript

c++ - 将 vector 幅度减小特定长度的有效方法?

C++ SQL Server 连接,然后以特定方式读取表