структуры, хранящиеся в списке в памяти
                  
                  
                  std::vector<S> s;
                  
                  
                  Бывает нужно поискать в этом списке структуру по какому-то полю этой структуры. Это можно сделать 2-мя способами:
                  
                  
                  
                  
                  
                  1) Линейный поиск
                  
                  
                  std::find_if(s.begin(), s.end(), [&field](auto &r) {return r.field == field});
                  
                  
                  Минусы - при большом размере списка и частых запросах будет медленно работать
                  
                  
                  2) Сохранение нужного поля как ключа в мапе, и поиск по мапе
                  
                  
                  std::map<FieldType, S> mapS;
                  
                  
                  Плюсы очевидны - увеличение скорости поиска с линейного до логарифмического или константного (в случае unordered map)
                  
                  
                  
                  
                  
                  Пока вроде все довольно очевидно и не стоит того, чтобы быть написанным в чате pro.cxx
                  
                  
                  Но теперь вопрос.
                  
                  
                  
                  
                  
                  Предположим, что мы последовали второму пути и сделали map из наших структур.
                  
                  
                  И теперь нам понадобилось искать еще по какому-то полю из этой структуры. В результате опять приходим к 2-м вариантам
                  
                  
                  
                  
                  
                  1) Линейный поиск по мапе
                  
                  
                  std::find_if(mapS.begin(), mapS.end(), [field2](const auto &r) {return r.second.field2 == field2})
                  
                  
                  Минус тотже, при большом размере списка и частых запросов неизбежно замедление
                  
                  
                  2) Сделать мапу с ключем по этому полю. Плюс - быстрый поиск, но минус - теперь нужно поддерживать и синхронизировать между собой 2 (а то и больше) структур.
                  
                  
                  
                  
                  
                  Внимание, вопрос: есть ли какой-то еще один способ решить данную задачу?
                  
                  
                
boost.multi_index
Поля структуры константы?
Обсуждают сегодня