Функции STL с трехсторонним предикатом сравнения - PullRequest
5 голосов
/ 22 мая 2011

Есть ли библиотека с функциями STL, такими как std::sort(), std::binary_search(), std::lower_bound(), std::upper_bound(), принимающая предикаты трехстороннего сравнения (которые возвращают -1 при меньшем, 0 при равном, 1 при большом) вместо меньший предикат (верно при меньшем, ложно при равном или большом)?

Конечно, менее существенный предикат можно легко выделить из существующего трехстороннего предиката (например, [](A a, B b) { return compare3(a,b)<0; }), но это приводит к дополнительному количеству обращений к предикату.

1 Ответ

4 голосов
/ 22 мая 2011

Если вы посмотрите на реализацию вышеупомянутых алгоритмов, вы увидите, что lower / upper_bound вообще не делает 3-сторонние ветки, а binary_search делает только в последней итерации для проверки равенства и для сортировки ()Не знаю, но я почти уверен, что это не делает 3-сторонние ветки тоже.Так что ваша «оптимизация» не даст вам никакого ускорения.Наоборот, ваши сравнения будут медленнее.

...