Странное поведение при вставке слишком большого количества элементов в std :: map или std :: unordered_map - PullRequest
0 голосов
/ 06 ноября 2019

Я работаю над облаками точек и использую std::map<int, std::vector<int>> для нисходящей выборки облака. Ключи на карте содержат пространственный индекс, а вектор содержит идентификаторы точек. Из этой карты я извлекаю некоторые точки для обработки, и эта обработка выполняется с использованием многопоточности (а не части с картой). На данный момент карта уже выходит за рамки. Однако, когда мое облако слишком большое, а коэффициент понижающей дискретизации слишком низкий, я получаю действительно странное поведение. Несмотря на то, что я использую все свои логические потоки, моя загрузка процессора снижается до 60-70%. Когда я делаю сэмплирование без карты (просто пропуская точки), я не вижу этой проблемы. Я проверил, что все потоки работают, и у моего приложения нет мьютексов, которые они только читают из облака, которое является vtkUnstructuredGrid и потокобезопасным для операции только для чтения. Я не понимаю, почему могло произойти что-то подобное.

Может ли эта проблема возникать из-за map::max_size(), потому что, когда я уменьшаю размер карты, у меня не возникает никаких проблем. Также, почему это вызвало проблему в моей многопоточной части? Мой вопрос был бы: вставка элементов на карту больше чем max_size вызывает какое-то неопределенное поведение? Заранее спасибо.

...