给定一组点分十进制表示的IP地址,按照IP地址大小进行升序排列。IP地址范围为0.0.0.0 -255.255.255.255,用C++实现
时间: 2024-12-23 15:15:25 浏览: 3
在C++中,你可以通过将IP地址拆分成四个八位字节,并分别比较每个部分的值来进行排序。这里是一个简单的示例,假设我们有一个结构体`IPAddress`来存储IP地址,并有一个函数`compareIPAddresses`来进行排序:
```cpp
#include <iostream>
#include <vector>
#include <algorithm>
// 定义一个结构体表示IP地址
struct IPAddress {
unsigned char a, b, c, d;
IPAddress(unsigned char _a, unsigned char _b, unsigned char _c, unsigned char _d)
: a(_a), b(_b), c(_c), d(_d) {}
};
// 比较两个IP地址的大小
bool compareIPAddresses(const IPAddress& ip1, const IPAddress& ip2) {
return (ip1.a == ip2.a && ip1.b == ip2.b && ip1.c == ip2.c) ? ip1.d < ip2.d
: (ip1.a < ip2.a || (ip1.a == ip2.a && ip1.b < ip2.b) ||
(ip1.a == ip2.a && ip1.b == ip2.b && ip1.c < ip2.c));
}
int main() {
std::vector<IPAddress> addresses = {
{192, 168, 1, 1}, // IP地址1
{0, 0, 0, 0}, // IP地址0
{255, 255, 255, 255}, // IP地址最大
{172, 16, 0, 1} // IP地址2
};
std::sort(addresses.begin(), addresses.end(), compareIPAddresses);
for (const auto& addr : addresses) {
std::cout << "IP Address: " << std::dec << addr.a << "." << addr.b << "."
<< addr.c << "." << addr.d << std::endl;
}
return 0;
}
```
这个程序首先定义了`IPAddress`结构体,然后提供了一个比较函数`compareIPAddresses`用于按照字节顺序逐段比较。`std::sort`函数会自动对整个向量进行升序排序。
阅读全文