CSV — C ++ Эквивалент функции VLOOKUP

Я пытаюсь создать эквивалент функции Excel VLOOKUP для двумерного CSV-файла, который у меня есть. Если бы мне дали число 5, я бы хотел иметь возможность посмотреть на столбец динамической таблицы, которая у меня есть, и найти в этом столбце строку с наибольшим числом меньше пяти.

Например. Если бы я использовал 5 из моего примера раньше:

2  6
3  7
4  11
6  2
9  4

Вернул бы мне 11, данные в паре с самой высокой записью ниже 5.

Я понятия не имею, как это сделать. Если это поможет, записи в первом столбце (столбце, который я буду искать) будут переходить от наименьшего к наибольшему.

Я новичок в C ++, поэтому я прошу прощения, если я пропустил какой-то очевидный метод.

1

Решение

std::map может сделать это довольно легко:

Вы начнете с создания карты правильного типа, а затем заполните ее своими данными:

std::map<int, int, std::greater<int> > data;

data[2] = 6;
data[3] = 7;
data[4] = 11;
data[6] = 2;
data[9] = 4;

Тогда вы будете искать данные с lower_bound или же upper_bound:

std::cout << data.lower_bound(5)->second; // prints 11

Пара замечаний: во-первых, обратите внимание на использование std::greater<T> как оператор сравнения. Это необходимо, потому что lower_bound обычно возвращает итератор следующий элемент (вместо предыдущего), если искомый ключ отсутствует на карте. С помощью std::greater<T> сортирует карту в обратном порядке, поэтому «следующий» элемент будет меньшим, чем большим.

Во-вторых, обратите внимание, что это автоматически сортирует данные по ключам, поэтому зависит только от вставляемых данных, а не от порядка вставки.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]