У меня есть std::vector<std::string> k;
с ключами значений ведьмы, к которой я стремился. У меня есть std::map<std::string, void*> table;
Я ищу. Я хочу получить значения std::vector<void*> v;
для всех ключей, которые находятся в k
(если такие значения существуют в table
, не все ключи могут быть представлены в table
, и этот факт для меня не важен, в то время как важно то, что может быть гораздо больше ключей, чем в k
). Как найти все значения, соответствующие ключам?Как найти все элементы, соответствующие вектору ключей?
Использование table[k_element]
из table.find(k_element)
для каждого элемента в k
кажется очень плохой способ сделать это и я не мог find any algorithm in STL, которые могли бы сделать это в групповом порядке ... (
Хороший ответ. В частности, * ", в то время как тот факт, что может быть ** гораздо больше ** ключей, чем в k" * (жирный шрифт), указывает, что линейная итерация через клавиши поиска 'table' в' k' будет хуже повторения O (log2N) зондов. Достойной альтернативой является использование 'std :: unordered_map' вместо' std :: map'. –
Существует не решение, которое быстрее, чем линейное, но решение, которое вы цитируете, - 'O (| k | log n)'. Теоретически вы можете сделать это в 'O (| k | + n)', что может быть быстрее, если | k | достаточно большой. Например, если 'k' сортируется, это очень простой алгоритм для получения' O (| k | + n) ' – rabensky
Если вы упорядочиваете ключи в unordered_set, вы можете достичь времени« O (n) », altough 'O (k * log n)' будет быстрее, учитывая, что 'n >> k' – dlavila