我正在编写一个简单的 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/