我在比较以下类的对象时遇到问题:(只有相关的字段)
class Rule{
private:
string _src_IP,
_src_port,
_dest_IP,
_dest_port,
_protocol; };
_src_IP和_dst_IP可以包含IP地址(“0.0.0.0” - “255.255.255.255”) 或“任何” _src_Port和_dst_Port可以包含端口号(“0” - “65535”) 或“任何” _protocol可以包含“TCP”,“UDP”或“任何”。
困难在于创建一个比较(运算符<和运算符>),它将满足严格弱序的标准数学定义。
如果有人能想到某些事情,那将会非常有帮助。
答案 0 :(得分:0)
我想你想在基于树的关联容器(如std :: map)中使用这个结构作为键,并找到匹配某个特定值集的规则(如果需要,使用“any”匹配)。 / p>
这是不可能的:严格的弱排序(对密钥的要求)意味着虽然您不必告诉每对不同的值,哪一个更大,但仅允许的偏差是您可以制作组,其中您认为所有元素都相等。十进制整数的字符串表示是一个示例:您“2”和“002”彼此相等,尽管它们是不同的字符串。如果我发现另一个字符串等于同一组中的一个字符串(如“02”,它被认为等于“2”),我可以确定它与该组中的所有字符串相等。< / p>
在您的设置中,您要考虑将192.168.0.1-&gt; 8.8.8.8:53 / udp视为等于任何 - > 8.8.8.8:53 / udp,因此它们必须位于同一组中。对于10.0.3.5-> 8.8.8.8:53 / udp也是如此,其也应该被认为等于任何 - > 8.8.8.8/udp。如果是严格的弱排序,你还需要考虑10.0.3.5-> 8.8.8.8:53 / udp等于192.168.0.1-> 8.8.8.8:53 / udp,这是你最有可能做的事情不想要。