То, что вы ищете, сделано в Boost с MultiIndex . Вот хороший учебник от Boost о том, как вы можете использовать его, чтобы решить, что вы запрашиваете при сборе данных, и о выборе примеров .
Конечно, использование этого объекта коллекции, вероятно, также изменит способ хранения информации. Вы будете размещать его в структуре. Однако, если вы хотите обрабатывать вашу информацию как базу данных с уникальным порядком по спецификации, это единственный способ, которым я знаю, как это чисто.
Другой вариант - создать свой собственный оператор заказа при размещении элементов в std :: map. Следовательно:
struct Orders{
int order_num;
int id;
int order_num_relation;
int relation_id;
bool operator<(const Orders& _rhs){
if(order_num < _rhs.order_num) return true;
if(order_num == _rhs.order_num){
if( id < _rhs.id) return true;
if( id == _rhs.id){
//and so on, and so on
Честно говоря, этот путь является болью и порождает очень легко игнорируемую логическую ошибку. Используя Boost, большинство «хитрых» вещей позаботятся о вас.