Слабость вашего подхода заключается в его линейности.Вы хотите двоичный поиск для speedz.
Используя сортировку map
, двоичность нахождения в одном и тот факт, что эквивалентность между vector
s уже определена для вас (нет необходимостидля этой первой функции compare
!) вы можете сделать это довольно легко:
std::map<std::vector<std::string>, int> lookup{
{{"Apple","Orange","three"}, 129},
{{"A","B","CCC"}, 189},
// ...
};
int compare(const std::vector<std::string>& inputData)
{
auto it = lookup.find(inputData);
if (it != lookup.end())
return it->second;
else
return 0;
}
Обратите внимание также на передачу ссылки для дополнительной скорости z.
(у меня нетпроверил это на предмет точной синтаксической корректности, но вы поняли.)
Однако! Как всегда, мы должны учитывать контекст в наших проектах.Такой подход более полезен в более широком масштабе.На данный момент у вас есть только несколько опций, поэтому добавление динамического выделения и сортировки и всего этого джаза может на самом деле замедлить ход событий.В конечном счете, вы захотите принять мое решение и ваше решение и измерить результаты для типичных входных данных и еще много чего.
Как только вы это сделаете, если вам все еще нужно больше скорости дляпо какой-то причине, подумайте над поиском путей уменьшения динамического распределения, присущего как векторам, так и самим строкам.
Чтобы ответить на ваш дополнительный вопрос: почти;вам нужно указать тип:
// new code is here
// ||||||||||||||||||||||||
if (inputData == std::vector<std::string>{"Apple","Orange","three"})
{
return 129;
}
Как было рассмотрено выше, пусть std::map::find
сделает это за вас.Это лучше.