STL структура данных с сортировкой - PullRequest
1 голос
/ 04 ноября 2010

Мне нужна структура данных, которая может автоматически сортироваться на основе структуры.

struct{
  int key;
  int comparisonValue(size of the vector);
}

Мне нужно это в следующей форме:

datastructure<struct, vector<int>>

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

Какую структуру данных я могу использовать? Могу ли я использовать карту и есть специальный сортировщик для карты?

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

Спасибо

Ответы [ 2 ]

10 голосов
/ 04 ноября 2010

std :: map из STL.

По умолчанию это сортирует значения ключей, сравнивая их с использованием std::less<Key>, который по умолчанию вызывает operator< для значений ключей.Следовательно, вы можете определить перегрузку operator< для вашего типа структуры ::

bool operator<(const Key &a, const Key &b)
{
    return (a.someField < b.someField);
}
1 голос
/ 04 ноября 2010

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

Если вы имеете в виду, что вы хотели бы получитьНаименьший элемент во всей коллекции, вам может быть лучше с std::priority_queue, при условии, что вы обновляете только самый маленький элемент.

В противном случае std::mapвероятно, то, что вам нужно, как полагает Оли Чарльзуорт.Вам, вероятно, следует взглянуть на методы map lower_bound() и upper_bound().

Вы также должны знать, что контейнеры STL хранят копий объектов, поэтому если вычтобы ваши изменения отражались в другом месте, вам нужно хранить указатели на объекты.Тогда вы будете использовать отдельный Функтор для сравнения указателей в соответствии с тем, на что они указывают.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...