Порядок отображения одинаковых ключей в VC ++ - PullRequest
1 голос
/ 17 июля 2011

Вопрос о том, сохраняет ли мультикарта порядок вставки идентичных ключей, неоднократно задавался, и я думаю, что довольно ясно, что стандарт говорит, что это не так. Хотя, по-видимому, C ++ 0x какое-то время говорил, что сделал, а потом снова нет?

В любом случае, мне нужна структура, в которой я могу искать по ключу и перебирать ее в порядке вставки для идентичных ключей. Что означает, что я не могу использовать составные ключи, как тогда, как я могу искать по ключу?

Итак, поддерживает ли VC ++ порядок вставки идентичных ключей для мультикарт? (Или где мне искать реализацию Microsoft, потому что я не смог ее найти?) Если это не так, какова лучшая альтернатива? повышение :: мультииндексных

Что если бы я вместо простой вставки без позиции всегда сначала просматривал нужную позицию и передавал последний элемент для идентичного ключа в качестве подсказки позиции (например, использовал второй итератор equal_range)? Возможно, это сработает (меня интересует только g ++ и компилятор Windows). Я думаю, что это можно сравнить с этим элементом, затем со следующим, затем с радостью и вставкой? Или не может, так как древовидная структура может означать, что на самом деле она может не переключать магический лист для идентичных ключей, и если неправильный потомок свободен, вставьте его туда?

Кстати, я никогда не понимаю ответов, которые предполагают использование двух структур. Конечно, это делает удаления довольно дорогими?

Ответы [ 2 ]

3 голосов
/ 17 июля 2011

std::map<std::vector<T> > выполняет все ваши требования.

0 голосов
/ 17 июля 2011

Вы можете использовать составные ключи.Просто используйте lower_bound для поиска.Не уверен, что это решит вашу главную проблему.

...