Вопрос о том, сохраняет ли мультикарта порядок вставки идентичных ключей, задавался много раз, и я думаю, довольно ясно, что стандарт говорит, что это не так. Хотя, по-видимому, C++0x какое-то время говорил, что да, а потом опять нет?
В любом случае, мне нужна структура, в которой я могу искать по ключу и перебирать его в порядке вставки для идентичных ключей. Это означает, что я не могу использовать составные ключи, тогда как я могу искать по ключу?
Итак, поддерживает ли VC++ порядок вставки идентичных ключей для мультикарт? (Или где бы я искал реализацию Microsoft, потому что я не мог ее найти?) Если это не так, что является лучшей альтернативой? повысить::мультииндекс?
Что, если бы я вместо того, чтобы просто вставлять без позиции, всегда сначала искал нужную позицию и передал последний элемент для идентичного ключа в качестве предложения позиции (например, использовать второй итератор equal_range)? Возможно, это сработает (меня волнуют только g++ и компилятор Windows). Я бы предположил, что это может сравниться с этим элементом, затем со следующим, затем быть счастливым и вставить? Или не может, поскольку древовидная структура может означать, что на самом деле он может не выполнять волшебное переключение листьев для идентичных ключей, и если не тот дочерний элемент свободен, вставьте его туда?
Кстати, я никогда не понимаю ответов, которые предлагают использовать две структуры. Конечно, это делает удаления довольно дорогими?
map<vector>
, как сказал @Sjoerd, илиmap<list>
, если вам нужно удалить определенные значения в одном ключе. - person tomasz   schedule 17.07.2011