Я пытаюсь сделать свою программу более эффективной, и я считаю, что исправление этого линейного поиска будет очень полезно с точки зрения скорости, но мне любопытно, как бы я изменил это на нечто вроде двоичного поиск, поскольку я считаю, что список не обязательно упорядочен. Есть ли способ упорядочить список на основе его первого аргумента key
?Более быстрый способ поиска списка?
Что я работаю в настоящее время:
int* key_sequences::data(int key){
for(it=myList.begin(); it!=myList.end(); ++it){
if(it->first==key){
return &(it->second[0]);
}
}
return nullptr;
};
Двоичный поиск невозможен без сортировки. –
Очевидным ответом было бы прекратить использование списка и заменить его более подходящей структурой данных (возможно, «map» или 'unordered_map', из внешнего вида вещей). В зависимости от того, когда/как часто происходит вставка/удаление, вы можете также рассмотреть «FlatMap» - двоичный поиск в отсортированном массиве. –
Часто последовательность последовательно повторяется, для последовательных клавиш. Кэширование последнего результата поиска может затем сократить общее время от O (n²) до O (n). Но я бы изменил структуру данных на что-то более подходящее, например «карта». –