2015-01-24 2 views
-2

У меня есть проблема сравнения объектов следующего класса: (только поля актуальны)Сравнение двух объектов - строгий слабый

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 ") или" any ".
_src_Port и _dst_Port могут содержать номер порта («0» - «65535») или «any».
_protocol может содержать «TCP», «UDP» или «any».

Сложность создает сравнение (оператор < и оператор>), который удовлетворит стандартное математическое определение строгого слабого упорядочения.

Если кто-то может что-то придумать, это будет очень полезно.

+5

Есть бесконечные способы сделать это, и я не вижу никаких проблем. Просьба уточнить. –

ответ

0

Я думаю, вы хотите использовать эту структуру как ключ в ассоциативном контейнере на основе дерева (например, std :: map) и найти правила, которые соответствуют определенному набору значений (используя «любые» соответствия, если необходимо).

Это не возможно: Строгое слабое упорядочение (требование для ключей) означает, что, хотя вам не нужно указывать для каждой пары разных значений, какая из них больше, только допустимое отклонение состоит в том, что вы можете создавать группы, в которых вы считаете все элементы равными. Строковые представления десятичных целых чисел являются примером: вы «2» и «002» равны друг другу, хотя это разные строки. Если я найду другую строку, равную одной строке в той же самой группе (например, «02», которая считается равной «2»), я могу быть уверен, что она сравнивается с целыми строками в этой группе.

В вашей настройке вы хотите, чтобы 192.168.0.1-> 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, чего вы, скорее всего, не хотите ,

+0

Что вы подразумеваете под группами? – Yotam

+0

Под «группой» я имею в виду пару значений, на которые вы хотите установить строгий слабый порядок. «2», «02» и «002» находятся в одной группе в моем примере. Все объекты в группе должны быть равны друг другу (часто их называют «эквивалентными»), и ни один элемент в этой группе не должен быть равен ни одному элементу, не входящему в эту группу. –

+0

Итак, какая структура данных вы предлагаете мне использовать? – Yotam

Смежные вопросы