Работая в С++ в среде Linux, у меня есть ситуация, когда определено число целочисленных диапазонов, а целые входы сопоставляются с различными произвольными целыми числами, на основе которых они попадают. Ни один из диапазонов не перекрывается, и они не всегда смежны.
"Самый простой" способ решить эту проблему - это набор if-операторов для каждого диапазона, но количество диапазонов, их границ и целевых значений может варьироваться, поэтому if-statements не поддерживаются.
Например, диапазоны могут быть [0, 70], называемые r_a, [101, 150], называть его r_b и [201, 400], называть его r_c. Входы на карте r_a равны 1, на карте r_b - 2, а r_c - на 3. Все, что не в r_a, r_b, r_c, отображается на 0.
Я могу найти структуру данных и алгоритм, в котором хранятся кортежи (границы, цель карты) и итерации через них, поэтому поиск целевого значения принимает линейное время в числе пар границ. Я также могу представить схему, которая поддерживает упорядоченность пар и использует двоичный алгоритм сортировки по всем нижним границам (или верхним границам), находит ближайшую к входу, а затем сравнивает с противоположной границей.
Есть ли лучший способ выполнить сопоставление, чем алгоритм на основе бинарного поиска? Еще лучше, есть ли еще библиотека С++, которая делает это уже?