Чтобы упорядочить элементы при вставке, вам нужно использовать (упорядоченную) карту, она разработана с асимптотически логарифмической (N) сложностью вставки в худшем случае, лучший результат для любых алгоритмов упорядочения на основе сравнения.
Чтобы обеспечить быстрый (средний) доступ к существующим элементам, вы можете , вероятно, хотеть использовать неупорядоченную (хэш) карту.
Если оба случая являются значительными, вы можете использовать обе карты, вручную или одновременно создавая некоторую карту класса-оболочки, инкапсулирующую карту и упорядоченную карту.
Однако это решение может быть полезно только в том случае, если операции чтения (значительно!) Выполняются чаще, чем операции записи, и имеют некоторые недостатки, такие как потребление памяти (что может привести к снижению производительности из-за проблем с кешем и подкачкой страниц). Так что в любом случае с этим решением нужно было провести некоторые эксперименты и профилирование.
Кроме того, если ваш порядок имеет некоторые особенности, например, ваши элементы упорядочены по некоторым значениям «скорости» из небольшого набора (скажем, 1,2, ... 10), определенные алгоритмы упорядочения могут быть лучше, чем map (поскольку этот порядок может не основываться на сравнении)
[править] (Мой последний пример с упорядочением по небольшим значениям диапазона, строго говоря, несовместим с возможным использованием std :: map, так как для большого количества элементов он явно не производит строго слабый порядок. Я не удаляю его, так как это может быть иногда полезно в некоторых приложениях)