- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
u_long thisIp = htonl(this->sockaddr.sin_addr.S_un.S_addr);
u_long otherIp = htonl(other.sockaddr.sin_addr.S_un.S_addr);
u_short thisPort = htons(this->sockaddr.sin_port);
u_short otherPort = htons(other.sockaddr.sin_port);
// ip1 + port1 < ip2 + port2
if (thisIp < otherIp)
{
if (thisPort <= otherPort)
{
return true;
}
else
{
return ((unsigned)(thisPort - otherPort) < (unsigned)(otherIp - thisIp));
}
}
else
{
if (thisPort >= otherPort)
{
return false;
}
else
{
return ((unsigned)(thisIp - otherIp) < (unsigned)(otherPort - thisPort));
}
}
Сравнить IPv4 адрес + порт. Т.е., по сути, (thisIP + thisPort) < (otherIP + otherPort).
unsigned long long, приди!
guest 21.05.2016 22:17 # 0
guest 21.05.2016 22:35 # 0
kerman 21.05.2016 22:50 # 0
bormand 21.05.2016 22:58 # 0
kerman 21.05.2016 23:02 # 0
gost 22.05.2016 10:11 # 0
kurwa 22.05.2016 13:19 # +2
gost 22.05.2016 17:20 # +1
Вот же!
bormand 22.05.2016 17:40 # +2
Xom94ok 21.05.2016 22:53 # +1
roman-kashitsyn 22.05.2016 20:16 # +2
bormand 22.05.2016 20:18 # +1
З.Ы. Хотя, если порядок не нужен, проще заюзать хешмап и не париться с operator <...
WGH 31.05.2016 13:11 # 0
guest 31.05.2016 13:18 # +4
3_dar 21.05.2016 23:40 # +1
Вот блять почему в С/С++ нельзя называть переменные по нормальному?
j123123 21.05.2016 23:56 # −4
guesto 22.05.2016 00:27 # +3
Ничето не мешает тебе назвать их SocketAddress
bormand 22.05.2016 11:07 # +1
gost 22.05.2016 17:21 # +2
defecate-plusplus 22.05.2016 12:10 # +3
порты надо сравнивать только если адреса равны
gost 22.05.2016 17:21 # +2
WGH 01.06.2016 00:16 # 0
roman-kashitsyn 01.06.2016 09:48 # 0
Если компилять с O2, то производительность примерно как у написанных вручную сравнений, если без оптимизации - примерно на порядок медленнее.