Здравствуйте, Alexander G, Вы писали:
AG>Кто-нибудь можеть привести пример разумного применения?
имххо, set и multiset это примерно тожесамое что map и multimap, только без значений value.
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
Здравствуйте, Vain, Вы писали:
V>имххо, set и multiset это примерно тожесамое что map и multimap, только без значений value.
Для multimap вижу применение: привязывать к структурам числовые ключи и работать с диапазомами этих ключей методами lower_bound, upper_bound, equal_range. Просто связать ключи и значения — это скорее hash_map чем multimap.
"To protect people you must slay people. To let people live you must let people die. This is the true teaching of the sword."
-Seijuro Hiko, "Rurouni Kensin"
Здравствуйте, Roman Odaisky, Вы писали:
Z>>Задача: У Маши в корзине 4 яблока. Мама положила ей в корзинку еще 3 груши. Сколько фруктов в корзинке у Маши?
RO>Здесь нужен std::map<Fruit, std::size_t>, а не multiset.
size() может иметь сложность O(1), а сумма по std::map<Fruit, std::size_t> — O(n)
Здравствуйте, Zigmar, Вы писали:
Z>Здравствуйте, Alexander G, Вы писали: AG>>Зачем может пригодиться multiset — не понимаю.
Z>Задача: У Маши в корзине 4 яблока. Мама положила ей в корзинку еще 3 груши. Сколько фруктов в корзинке у Маши? Z>Решение:
Не очень убедительно. Для данной задачи будет лучше vector. Для оптимальой работы при большом количестве фруктов и малом количестве типов фуктов — вариант Roman Odaisky. При большом числе типов фуктов — unordered_multiset.
Здравствуйте, Alexander G, Вы писали: Z>>Задача: У Маши в корзине 4 яблока. Мама положила ей в корзинку еще 3 груши. Сколько фруктов в корзинке у Маши? Z>>Решение: AG>Не очень убедительно. Для данной задачи будет лучше vector. Для оптимальой работы при большом количестве фруктов и малом количестве типов фуктов — вариант Roman Odaisky. При большом числе типов фуктов — unordered_multiset.
Эты была скорее шутка На практике, я не разу не сталкивался с задачей, где мне пришлось пользоваться multiset. Но мне кажется, что такие случае вполне могут быть, как пример выше, когда предикат сравнения не гарантирует тождественности самих объектов.
"To protect people you must slay people. To let people live you must let people die. This is the true teaching of the sword."
-Seijuro Hiko, "Rurouni Kensin"
Здравствуйте, Alexander G, Вы писали:
AG>Здравствуйте, R.K., Вы писали:
RK>>Возможно, для хранения частично упорядоченного множества. Например: AG>2. Тут лучше подходит unordered_mulitset/hash_multiset, а не multiset.
Интересно, как unordered_mulitset может подойти лучше в задаче, в которой требуется упорядочение.
Здравствуйте, Zigmar, Вы писали:
Z>Здравствуйте, Alexander G, Вы писали: Z>>>Задача: У Маши в корзине 4 яблока. Мама положила ей в корзинку еще 3 груши. Сколько фруктов в корзинке у Маши? Z>>>Решение: AG>>Не очень убедительно. Для данной задачи будет лучше vector. Для оптимальой работы при большом количестве фруктов и малом количестве типов фуктов — вариант Roman Odaisky. При большом числе типов фуктов — unordered_multiset. Z>Эты была скорее шутка На практике, я не разу не сталкивался с задачей, где мне пришлось пользоваться multiset. Но мне кажется, что такие случае вполне могут быть, как пример выше, когда предикат сравнения не гарантирует тождественности самих объектов.
Вообще-то предикаты, не гарантирующие тождественности, встречаются сплошь и рядом, а именно — когда ты упорядочиваешь структуры по одному полю и значения этого поля не являются уникальными (например, фамилия).
Здравствуйте, Alexander G, Вы писали:
AG>Кто-нибудь можеть привести пример разумного применения?
Да запросто. Например, у тебя у человека есть набор отработаных смен, и нужно их распределить по датам. std::map<date, shift> не пойдёт, так как могут быть две (или три) смены в один день. Тут-то std::multimap/multiset и помогает.
Здравствуйте, Zigmar, Вы писали:
Z>Здравствуйте, Alexander G, Вы писали: AG>>Зачем может пригодиться multiset — не понимаю.
Z>Задача: У Маши в корзине 4 яблока. Мама положила ей в корзинку еще 3 груши. Сколько фруктов в корзинке у Маши? Z>Решение: Z>
AG>Кто-нибудь можеть привести пример разумного применения?
Пример: есть заказ и его составляющие, т.е. отношение один ко многим.
Можно хранить составляющие в multiset, причем ключем будет ссылка на заказ (ID заказа), тогда по ID заказа можно эффективно выбрать все его составляющие.
Здравствуйте, Alexander G, Вы писали:
AG>Кто-нибудь можеть привести пример разумного применения?
например, над множеством объектов требуется построить различные индексы по каким любо ключам.
как вариант, индексы можно делать в виде set или multiset из указателей с соответсвующими компараторами — multisetset<T*, T_compare>
Здравствуйте, jazzer, Вы писали:
RK>>>Возможно, для хранения частично упорядоченного множества. Например: AG>>2. Тут лучше подходит unordered_mulitset/hash_multiset, а не multiset. J>Интересно, как unordered_mulitset может подойти лучше в задаче, в которой требуется упорядочение.
Интересно как в случае multiset (не multimap) извлечь пользу из упорядочения.
Здравствуйте, maq, Вы писали:
maq>Пример: есть заказ и его составляющие, т.е. отношение один ко многим.
maq>Можно хранить составляющие в multiset, причем ключем будет ссылка на заказ (ID заказа), тогда по ID заказа можно эффективно выбрать все его составляющие.
Это multimap, а не multiset, причём скорее даже unordered_multimap