Класс содержит два целых числа; есть два экземпляра этого класса. Я хочу сравнить их, чтобы убедиться, что два экземпляра содержат одинаковые два числа (их заказы не имеют значения).Наиболее эффективный способ сравнения двух пар целых чисел
Я могу это сделать:
bool operator==(const Edge &e, const Edge &f) {
return ((e.p1 == f.p1) || (e.p1 == f.p2)) && ((e.p2 == f.p1) || (e.p2 == f.p2));
}
Это лучший способ есть? Там будет много таких сравнений, поэтому я хочу убедиться, что сделаю самый эффективный выбор. BTW, оператор будет в основном использоваться классом std::unordered_set
- в случае, если эта информация имеет значение.
Забудьте о оптимизации. Я думаю, что ваша логика неверна. Эти два условия могут быть правдой: (e.p1 == f.p1) (e.p2 == f.p1), и ваша функция вернет true без рассмотрения f.p2. –
Невозможно оптимизировать это, не зная подробностей использования.Например, существует ли много, гораздо больше сравнений, тогда есть создания Edges? Можем ли мы добавить дополнительные данные в структуру Edge или получить премию за память? Являются ли эти целые числа неизменными для жизни экземпляра класса или могут ли они измениться? (Но, скорее всего, нет смысла оптимизировать его.) –
Если вы беспокоитесь о том, что операция выполняется несколько раз, а порядок чисел не имеет значения, вы можете просто убедиться, что p1 всегда равно или меньше, чем p2, а затем вы можете просто сравнить их непосредственно 'e.p1 == f.p1 && e.p2 == f.p2'. –