Size: a a a

2021 February 02

AF

Aidar Fattakhov in pro.cxx
Андрей Руссков
иначе какой смысл в equal_range?
2 раза не спускаться по дереву
источник

АР

Андрей Руссков... in pro.cxx
https://godbolt.org/z/ob87bx
вот поправленный пример
источник

AF

Aidar Fattakhov in pro.cxx
там короче никто не запрещает хранить препроцессинг формально
источник

АР

Андрей Руссков... in pro.cxx
предположим у меня не мапа а set с pair<int, int>.
источник

AF

Aidar Fattakhov in pro.cxx
один фиг
источник

АР

Андрей Руссков... in pro.cxx
я знаю что значения в set'е упорядоченные
источник

AF

Aidar Fattakhov in pro.cxx
компаратор должен быть трнзитивным
источник

АК

Александр Караев... in pro.cxx
Андрей Руссков
предположим у меня не мапа а set с pair<int, int>.
скажи, почему ты считаешь, что в коде с нетранзитивным компаратором нет UB?
источник

АР

Андрей Руссков... in pro.cxx
я хочу найти диапазон всех 1,*
источник

АР

Андрей Руссков... in pro.cxx
Александр Караев
скажи, почему ты считаешь, что в коде с нетранзитивным компаратором нет UB?
так он транзитивный
источник

AF

Aidar Fattakhov in pro.cxx
Андрей Руссков
так он транзитивный
нет
источник

АР

Андрей Руссков... in pro.cxx
в мапе никогда не появляется значений для которых он не транзитивный
источник

AF

Aidar Fattakhov in pro.cxx
это не важно
источник

AF

Aidar Fattakhov in pro.cxx
ты вызываешь его не только с элементами мапы
источник

АК

Александр Караев... in pro.cxx
Андрей Руссков
в мапе никогда не появляется значений для которых он не транзитивный
ты по ним ищешь, они передаются в качестве аргумента в компаратор.
у меня нет пруфов, но я на 90% уверен, что в стандарте написано что-то вроде "компаратор должен быть транзитивным для всех значений, которые так или иначе попадают в его аргументы"
источник

AF

Aidar Fattakhov in pro.cxx
у тебя такое
пусть: a<b
в компараторе:
!(a<0) => 0<=a
!(0<b) => b<=0
b<=0<=a => b<=a
источник

АР

Андрей Руссков... in pro.cxx
хорошо, давайте так. Если в мапе лежат
{'a', 'x'}, {'a', 'y'}, {'a', 'z'}, {'b', 'x'}, {'b', 'y'}, {'b', 'z'}
то они упорядочены и транзитивность не нарушена. Теперь мы передаем компаратор который игнорирует вторую часть ключа
{'a'}, {'a'}, {'a'}, {'b'}, {'b'}, {'b'}
всё еще транзитивны
источник

АР

Андрей Руссков... in pro.cxx
хорошо, вопрос на миллион. С transparent компаратором же должно работать?
источник

АР

Андрей Руссков... in pro.cxx
(по стандарту)
источник

АР

Андрей Руссков... in pro.cxx
точнее перефразируем вопрос: разница между equal_range через transparent компаратор и компаратор по ключу в том, что map никогда не предполагает возможность наличия нескольких элементов с одинаковым ключом, так?
источник