c++ - 当两个整数的第一个元素都是负数时,如何正确使用 < 和 > 运算符来处理 2 个整数向量?
问题描述
我正在编写一个简单的 C++17 程序来比较两个整数向量。
例如,我有两个向量:a
代表数字b
-1、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
.
有办法解决这个问题吗?例如,我想将两个向量转换为整数并进行比较,但我不知道该怎么做。
解决方案
正如@MPops 评论的那样,使用重载运算符<
withstd::vector
将进行字典比较,这不是您想要的(数字比较)。
在参考资料中阅读更多内容。
您需要手动对两个向量进行数值比较,方法是将 转换vector<int>
为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
推荐阅读
- java - Firebase 连接问题
- visual-studio-code - eslint 正在运行但未显示任何 lint 错误/警告
- ruby - 这个红宝石片段有什么作用?
- angular6 - 如何在Angular 6(反应形式)中的文本框内输入时读取文本框的值
- javascript - 如何通过 JavaScript 使用定制的 OpenSSL 调用 REST API?
- php - 显示带有分类图像的顶级 Woocommerce 产品标签
- python - 在python中创建一个值矩阵
- javascript - 点击复制段落内容
- excel - 查找范围内的值并格式化与其相邻的范围
- excel - Excel VBA 循环激活复选框