比较两个对象 - 严格弱

时间:2015-01-24 13:20:05

标签: c++

我在比较以下类的对象时遇到问题:(只有相关的字段)

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”或“任何”。

困难在于创建一个比较(运算符<和运算符>),它将满足严格弱序的标准数学定义。

如果有人能想到某些事情,那将会非常有帮助。

1 个答案:

答案 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,这是你最有可能做的事情不想要。