Предположим, я хочу иметь контейнер с яблоками, у которого разные цены. Я хочу, чтобы они отсортировались по их цене всегда (сначала самая высокая цена), но я также хочу быстро получить их по их идентификатору. То, что я до сих пор является следующая, какой контейнер я должен использовать для этого
struct AppleClass
{
string id;
int price;
bool operator<(const AppleClass& o) const
{
return price > o.price;
}
};
int main()
{
set<AppleClass> myapples;
myapples.insert({"apple1", 500});
myapples.insert({"apple2", 600});
myapples.insert({"apple3", 400});
for (auto& apple : myapples)
{
cout << apple.id << "," << apple.price << endl;
}
}
Мое приложение будет тратить на 20%, это удаление записи времени, 20% вставляя записи, 25% их извлечения (извлечения весь список), и 35 % их обновления (их цена будет увеличиваться или уменьшаться).
Контейнер будет иметь максимум 450 записей.
Мой код решает проблему сортировки. Найти бесполезно, так как я хочу найти по их идентификатору (так что мне нужно повторить все их). По этой же причине удаление и вставка будут медленными.
Это похоже на неправильный выбор.
Но если у меня есть карта, тогда она будет заказываться на основе идентификатора. И каждый раз, когда я извлекаю список, мне пришлось бы его скопировать в какой-нибудь контейнер, например, заказать его, а затем отправить его пользователю, что также будет медленным.
Помощь!
Для решения этого вопроса требуется немного больше болтовни, чем приемлемо для вопросов переполнения стека.Если вы написали код, чтобы попытаться решить вашу проблему, и он просто не работает правильно, он здесь по теме. Если ваш вопрос: «Как мне начать с этого?» это не. – mah
@mah Итак, если ваш код работает, но медленный, то я не должен спрашивать в stackoverflow, который другой контейнер исправит? потому что я понятия не имею. – James
Вы не дали достаточно информации. Почему поиск по-разному имеет значение? Однако простым способом является использование 'std :: vector' и сохранение двух копий - один по цене, а другой по id. Кроме того, вместо 'id' является' const char * ', используйте' std :: string'. Это позволяет идентификаторам задавать время выполнения (например, на основе пользовательского ввода), а не требовать строковых литералов. – Peter