c++ - 当两个整数 vector 的第一个元素都是负数时,如何正确使用 < 和 > 运算符?

标签 c++ sorting vector operator-overloading

我正在编写一个简单的 C++17 程序来比较两个整数 vector 。

例如,我有两个 vector :a代表数字-1,b 25

std::vector<int> a = {-1};
std::vector<int> b = {2, 5};
if(a < b)       std::cout << "a < b" << std::endl;
else if(a > b)  std::cout << "a > b" << std::endl;
else            std::cout << "a = b" << std::endl;

前一段代码产生的输出是a < b ,而且是正确的。 现在让我们考虑以下示例:

std::vector<int> a = {-1, 9};
std::vector<int> b = {-1, 9, 9};
if(a < b)       std::cout << "a < b" << std::endl;
else if(a > b)  std::cout << "a > b" << std::endl;
else            std::cout << "a = b" << std::endl;

这里的输出是a < b同样,但是因为 -19 > -199 我希望它是 a > b .

有办法解决吗?例如,我想将两个 vector 转换为整数并进行比较,但我不知道该怎么做。

最佳答案

正如@MPops 评论的那样,使用重载运算符 <std::vector将进行词典比较,这不是您想要的(数字比较)。

reference 中阅读更多内容.

您需要通过转换 vector<int> 来手动对两个 vector 进行数值比较到int ,像这样:

#include <iostream>
#include <vector>

template <typename T> int sgn(T val) {
    return (T(0) < val) - (val < T(0));
}

int vectorToInt(std::vector<int> v) {
  int result = 0;
  if(!v.size()) return result;
  result = result * 10 + v[0];
  for (size_t i = 1; i < v.size(); ++i) {
    result = result * 10 + (v[i] * sgn(v[0]));
  }
  return result;
}

int main(void) {
  std::vector<int> a_vec = {-1, 9};
  int a = vectorToInt(a_vec);
  std::vector<int> b_vec = {-1, 9, 9};
  int b = vectorToInt(b_vec);
  std::cout << "Comparing " << a << " with " << b << std::endl;

  if(a < b)       std::cout << "a < b" << std::endl;
  else if(a > b)  std::cout << "a > b" << std::endl;
  else            std::cout << "a = b" << std::endl;
  return 0;
}

输出:

Comparing -19 with -199
a > b

关于c++ - 当两个整数 vector 的第一个元素都是负数时,如何正确使用 < 和 > 运算符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56368169/

相关文章:

c++ - 将 vector 作为函数参数传递

c++ - 为什么字符串变量 "sum"没有存储任何数据并且程序没有给出任何输出

c++ - "most people seriously overuse casts"怎么办?

javascript - 数据表数字排序问题

c++ - 在 C++ 中对数字数组进行排序时,是否必须将字符串转换为 double ?

c++ - 在 C++ 中初始化 vector 类成员

c++ - 以行和列的形式访问 vector<vector<char>> 元素

c++ - 当我在 glTexImage2D 中选择与在着色器中采样不同的内部格式时,情况会怎样?

c++ - 检查是否启动关机

arrays - 在 Lua 中对数组中的数组进行排序