Не очень понятно, почему вы упомянули, что порядок ID и Name может быть разный? Разве это не независимые поля структурки?
Поля независимые, порядок (приоритет) нахождения разный - противоречий нет
Первый неиспользуемый == один из тех, что остались незаюзанными после маппинга?
Да
Что делать, если неиспользуемых нет?
Ничего. Да, в первом может быть 10, во втором только 5 (или наоборот). Ну значит 5 и остались незамаплнены, невозможного не требуется
можно глянуть boost multi_index_container
Когда-то читал, не очень понимаю как он здесь может пригодиться
Проще всего создать дополнительные индексы (мапы) для 2 контейнера.
Например что то типа
typedef QPair<QString,QString> id_name_index;
QMap<id_name_index, item_index> index_map;
В index_map сложим все индексы элементов второго контейнера, определяемые парой индексов.
Я тоже попытался мудрить в этом духе, но потом вставил флажок прямо к ключ и if в оператор <
Далее "все элементарно".
Скорее "тривиально"
Но увы - длинновато. Получается 3 прохода, на каждом эл-т ищется в std::set и удаляется если найден. Может есть что покруче?
Один вопрос только: что значит "берем первый неиспользуемый из 2-го контейнера"?
Не понял - ну то и значит, первый (по порядку) которые еще не был замаплен на эл-т первого контейнерв